1. ホーム
  2. c++

[解決済み] C++のenumを文字列に変換する簡単な方法はありますか?

2022-07-04 17:50:40

質問

いくつかの名前付き列挙型があるとします。

enum MyEnum {
      FOO,
      BAR = 0x50
};

私がグーグルで探したのは、私のプロジェクトのすべてのヘッダーをスキャンして、enumごとに1つの関数を持つヘッダーを生成するスクリプト(どんな言語でも)です。

char* enum_to_string(MyEnum t);

そして、こんな感じの実装。

char* enum_to_string(MyEnum t){
      switch(t){
         case FOO:
            return "FOO";
         case BAR:
            return "BAR";
         default:
            return "INVALID ENUM";
      }
 }

困ったことに、typedefed enum と無名の C スタイルの enum があります。誰かこのために何かを知っていますか?

EDIT: 解決策は、生成された関数を除いて、私のソースを修正してはいけません。列挙型は API 内にあるので、これまで提案された解決策を使用することは、オプションではありません。

どのように解決するのですか?

以下のサイトをご覧ください。 GCCXML .

サンプルコードでGCCXMLを実行すると、以下のような結果が得られます。

<GCC_XML>
  <Namespace id="_1" name="::" members="_3 " mangled="_Z2::"/>
  <Namespace id="_2" name="std" context="_1" members="" mangled="_Z3std"/>
  <Enumeration id="_3" name="MyEnum" context="_1" location="f0:1" file="f0" line="1">
    <EnumValue name="FOO" init="0"/>
    <EnumValue name="BAR" init="80"/>
  </Enumeration>
  <File id="f0" name="my_enum.h"/>
</GCC_XML>

EnumerationとEnumValueタグを引き出して、好きなコードを生成するために好きな言語を使用することができます。