溝を埋める: C 文字列を列挙型に変換する
C では、文字列を列挙型 (列挙型) に変換すると、次のような課題が生じます。さまざまなテクニックを使って解決します。 switch ステートメントは単純な解決策のように見えるかもしれませんが、その長さは扱いにくくなる可能性があります。この記事では、文字列から列挙型への変換を簡素化するための別のアプローチを検討します。
1 つの方法では、文字列と対応する列挙型の間のマッピングを使用します。この目的には、文字列をキーとして、列挙型を値として使用する標準マップまたは unowned_map を使用できます。ただし、マップにデータを追加するのは、switch ステートメントを作成するのと同じくらい面倒な場合があります。
C 11 to the Rescue
C 11 の出現により、マップに次の情報を追加するようになりました。 string-enum のペアが大幅に簡単になります。次のコード スニペットは、この単純さを示しています。
static std::unordered_map<std::string, E> const table = {{"a",E::a}, {"b",E::b}}; auto it = table.find(str); if (it != table.end()) { return it->second; } else { error() }
このコードでは、テーブル変数に文字列を列挙型に関連付ける静的マップが含まれています。指定された文字列 str がマップ内で検索されると、見つかった場合は対応する enum 値が返され、そうでない場合はエラーが報告されます。
結論
マップの使用中文字列を列挙型に変換すると便利ですが、マップの設定は switch ステートメントを作成するよりも複雑になる可能性があることに注意することが重要です。ただし、C 11 の簡素化された構文を使用すると、マップへの入力がはるかに簡単なタスクになります。
以上がC 文字列を列挙型に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。