ホームページ > バックエンド開発 > C++ > C の列挙型を文字列に効率的に変換するにはどうすればよいですか?

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

DDD
リリース: 2025-01-06 00:53:41
オリジナル
756 人が閲覧しました

How Can I Efficiently Convert C   Enums to Strings?

C 列挙型を文字列に変換: ソリューションの探索

列挙型を文字列にマッピングすることは、C 開発における一般的な要件です。前述の記事ではこの問題に焦点を当て、考えられる解決策について説明しています。著者は当初、switch ステートメントを使用する単純な方法を提案しましたが、その C のような性質について懸念を表明しました。

別のアプローチは、std::map 列挙値を文字列表現に関連付けます。構文を強化するために、作者は map_init クラスを導入しました。これにより、マップへのエントリのエレガントな追加が可能になります。

std::map<MyEnum, const char*> MyMap;
map_init(MyMap)
    (eValue1, "A")
    (eValue2, "B")
    (eValue3, "C")
;
ログイン後にコピー

map_init クラスは、次のように、operator() の連鎖を容易にします。演算子<< std::ostream 上。このクラスは、テンプレート化された map_init_helper を使用して、マップまたはマップに似た構造にエントリを追加するための使いやすいインターフェイスを提供します。

map_init クラスとヘルパーの実装は次のとおりです。

template struct map_init_helper
{
    T& data;
    map_init_helper(T& d) : data(d) {}
    map_init_helper& operator() (typename T::key_type const& key, typename T::mapped_type const& value)
    {
        data[key] = value;
        return *this;
    }
};

template map_init_helper map_init(T& item)
{
    return map_init_helper(item);
}

記事また、同様の機能を提供する既存のライブラリとして boost::assign についても言及しています。マップまたはマップ初期化クラスを使用すると、開発者は列挙値を対応する文字列に簡単に変換して、読みやすさと使いやすさを向上させることができます。

以上がC の列挙型を文字列に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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