我认为在C++11中引入的可变模板参数可以用于初始化一个map,其中键是整数,值是给定参数的字符串表示。
如果可能的话,我可以像这样简单地创建一个从枚举名称到其字符串表示的映射:
auto map = EnumStringMap<EnumType::Type1, EnumType::Type2>();
我可以通过这个模板使用枚举int表示来初始化列表
template<typename... Ts> auto enumList(Ts... args){
QList<int> res = {args...};
return res;
}
auto enums = enumList<int, int>(Enums::Enum1, Enums::Enum2);
我认为使用STRINGFY C宏可以得到表达式的字符串表示。
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
但我无法弄清如何将类型名称或类型值转换为其字符串表示形式,所以这是否可能呢? 我的目标是在编译时生成一个包含枚举的字符串表示的映射表。
像Qt使用的MOC这样的方法对我来说不适用,因为我应该将枚举项包含在QObject中,这很重且不可复制。
EnumStringMap<EnumType, std::string>
。 - vahancho