C 列挙型を文字列に変換する方法
名前付き C 列挙型を操作する場合、列挙値を対応する値に変換するシナリオが発生する場合があります。文字列表現が必要です。この変換にはいくつかのアプローチが存在しますが、この記事では、ソース コードを変更せずにプロジェクト内のすべての列挙型を文字列に変換する関数の生成に関する具体的なクエリについて説明します。
X-Macros: A Comprehensive Solution
推奨されるアプローチには、X-マクロの利用が含まれます。実装例を以下に示します。
#include <iostream> enum Colours { # define X(a) a, # include "colours.def" # undef X ColoursCount }; char const* const colours_str[] = { # define X(a) #a, # include "colours.def" # undef X 0 }; std::ostream& operator<<(std::ostream& os, enum Colours c) { if (c >= ColoursCount || c < 0) return os << "???"; return os << colours_str[c]; } int main() { std::cout << Red << Blue << Green << Cyan << Yellow << Magenta << std::endl; }
colours.def ファイルで、次のように列挙型を定義します。
X(Red) X(Green) X(Blue) X(Cyan) X(Yellow) X(Magenta)
このメソッドは、すべての変換関数を生成する柔軟な方法を提供します。ソース コードを変更することなく、プロジェクト内の列挙型を追加できます。
カスタマイズ可能な文字列生成
または、生成された文字列表現をカスタマイズできる方法を選択することもできます。次のコード スニペットは、これを実現する方法を示しています。
#define X(a, b) a, #define X(a, b) b, X(Red, "red") X(Green, "green") // etc.
このアプローチにより、生成された文字列をより詳細に制御できるため、アプリケーションに特定のカスタマイズが必要な場合に特に役立ちます。
以上がソースコードを変更せずにCの列挙型を文字列に自動的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。