列挙型を文字列に変換するための最新の C アプローチ
現代の C は、列挙型を文字列に効率的に変換する革新的な手法を提供します。これらのメソッドはコンパイラの機能を活用し、手動マッピングや実行時のオーバーヘッドの必要性を排除します。
Magic Enum Library
Magic Enum ヘッダー専用ライブラリは、列挙型の静的リフレクションを提供します。 C 17 では、文字列との簡単な変換や、列挙型の反復が可能になります。 value.
#include <magic_enum.hpp> enum class Color { RED = 2, BLUE = 4, GREEN = 8 }; Color color = Color::RED; std::string color_name = magic_enum::enum_name(color); // color_name -> "RED"
std::format ライブラリ (C 20)
C 20 で導入された std::format ライブラリは、文字列の書式設定に対するより標準化されたアプローチを提供します。 。これは、列挙名を表す std::string_view を返す enum_name 関数と組み合わせて使用できます。
#include <format> #include <magic_enum.hpp> enum class Color { RED = 2, BLUE = 4, GREEN = 8 }; Color color = Color::RED; std::string color_name = std::format("{}", magic_enum::enum_name(color)); // color_name -> "RED"
C 17 Fold Expressions と Variadic Templates
C 17 では、fold 式と可変個引数テンプレートを組み合わせて、列挙型に対するテーブル駆動のアプローチを作成できます。文字列変換。この手法は、Magic Enum ライブラリよりも若干冗長ですが、変換プロセスをより詳細に制御できます。
cppformat ライブラリ
cppformat ライブラリは、テンプレート ベースのマクロ システムを提供します。文字列の書式設定用。特殊なマクロによる列挙型から文字列への変換をサポートします。
#include <cppformat/format.h> enum class Color { RED = 2, BLUE = 4, GREEN = 8 }; Color color = Color::RED; std::string color_name = FMT_STRING(color); // color_name -> "RED"
最適なアプローチの選択は、負の値や断片化された列挙型範囲のサポートなど、特定の要件によって異なります。最新の C での汎用 enum から文字列への変換には、そのシンプルさと効率性の点で Magic Enum ライブラリをお勧めします。
以上が最新の C で列挙型を文字列に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。