C での文字列の列挙型への効率的な変換
C で列挙型を扱う場合、文字列を対応する列挙型に変換する必要が生じる場合があります。列挙値。 switch ステートメントで十分ですが、列挙値が多数あると煩雑になる可能性があります。この記事では、文字列から列挙型への効率的な変換のための別のアプローチについて説明します。
std::map ソリューション
1 つのアプローチは、std::map
C 11 Syntactic Sugar
C 11 以降では、より簡潔なソリューションが利用可能になります。静的に初期化された std::unowned_map を使用すると、中括弧を使用してマップにエレガントにデータを入力できます。
static std::unordered_map<std::string,E> const table = { {"a",E::a}, {"b",E::b} };
検索を実行するには、テーブルで find() メソッドを使用し、反復子が有効かどうかを確認するだけです。見つかった場合は、対応する enum 値を直接取得できます。
例
たとえば、次の enum 宣言を考えてみましょう。
enum class E { a, b, c };
そして文字列「a」の場合、次のコマンドを使用して対応する列挙値に変換できます。 table:
auto it = table.find("a"); if (it != table.end()) { E result = it->second; // ... }
このアプローチは、C で文字列を enum に変換するための簡潔で効率的なソリューションを提供し、長い switch ステートメントの複雑さを軽減します。
以上がC で文字列を列挙型に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。