C で文字列を列挙型に効率的に変換するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-11 01:55:02
オリジナル
499 人が閲覧しました

How to Efficiently Convert Strings to Enums in C  ?

C での文字列の列挙型への効率的な変換

C で列挙型を扱う場合、文字列を対応する列挙型に変換する必要が生じる場合があります。列挙値。 switch ステートメントで十分ですが、列挙値が多数あると煩雑になる可能性があります。この記事では、文字列から列挙型への効率的な変換のための別のアプローチについて説明します。

std::map ソリューション

1 つのアプローチは、std::mapまたは std::unowned_map。文字列と列挙値のキーと値のペアをマップに入力するのは簡単で、素早い検索が可能です。ただし、このメソッドは switch ステートメントの複雑さを共有しています。

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート