列挙型変数を文字列に変換する
列挙型変数を使用する場合、整数値の代わりに対応する文字列表現を出力する必要がある場合があります。 。この変換を実現するには、いくつかのアプローチが利用可能です。
単純な解決策
簡単なアプローチの 1 つは、個々の列挙値を文字列に変換する関数を作成することです。
enum OS_type { Linux, Apple, Windows }; inline const char* ToString(OS_type v) { switch (v) { case Linux: return "Linux"; case Apple: return "Apple"; case Windows: return "Windows"; default: return "[Unknown OS_type]"; } }
この方法は簡単ですが、多数の列挙型を扱う場合には非現実的になります。
Boost.Preprocessor ソリューション
変換プロセスを自動化するには、Boost.Preprocessor ライブラリを使用できます。このソリューションを使用すると、文字列変換を含む列挙型を一度に定義できます:
#include <boost/preprocessor.hpp> #define DEFINE_ENUM_WITH_STRING_CONVERSIONS(name, enumerators) \ enum name { \ BOOST_PP_SEQ_ENUM(enumerators) \ }; \ \ inline const char* ToString(name v) \ { \ switch (v) \ { \ BOOST_PP_SEQ_FOR_EACH( \ X_DEFINE_ENUM_WITH_STRING_CONVERSIONS_TOSTRING_CASE, \ name, \ enumerators \ ) \ default: return "[Unknown " BOOST_PP_STRINGIZE(name) "]"; \ } \ }
このマクロを使用すると、OS_type 列挙型を次のように定義できます:
DEFINE_ENUM_WITH_STRING_CONVERSIONS(OS_type, (Linux)(Apple)(Windows))
このアプローチにより、メンテナンスの問題が解決されます。単純なソリューションに関連する問題を検出し、必要な変換関数を動的に生成します。
その他考慮事項
C では、ToString を演算子のオーバーロードとして実装して、使用方法をより簡潔にすることができます。さらに、このソリューションは C での使用にも適応できます。
以上がC で列挙型変数を文字列表現に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。