キーがintで値が与えられた引数の文字列表記であるマップを初期化するためにC++ 11で導入されたVariadicテンプレート引数を使用できると思います。私はこのテンプレートC++ 11バリデーションテンプレートを使ってEnum To String Mapを初期化する
template<typename... Ts> auto enumList(Ts... args){
QList<int> res = {args...};
return res;
}
auto enums = enumList<int, int>(Enums::Enum1, Enums::Enum2);
Iを経由して列挙int型の表現のリストを初期化することができ
auto map = EnumStringMap<EnumType::Type1, EnumType::Type2>();
:私は単にこのような文字列表現に列挙名からマップを作成することができ、その可能であれば
STRINGFY Cマクロで式の文字列表現を得ることができると考えてください
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
しかし、私は文字列表現に型名や型の値を変換する方法を見つけることができないので、それはまったく可能ですか? 私の目標は、コンパイル時に列挙の文字列表現を保持するマップを生成することです。
QOPで使用されているMOCのようなアプローチは、私にとっては適切ではありません。なぜなら、QObjectに重くてコピーできない列挙型を囲む必要があるからです。
AFAIK C++では不可能です。 C#で可能ですが。私は単純にそのようなマッピング(静的) 'EnumStringMap'を作成します。 –
vahancho
[BETTER_ENUMS](https://github.com/aantron/better-enums)のようなライブラリでよく使われる方法は、マクロを使って列挙型を定義することです。 (それが反映されるまで)。 – Jarod42
@vahanchoは多数の列挙型(おそらく500+)を手動で維持するのが非常に難しい –