【发布时间】:2019-09-04 02:25:00
【问题描述】:
假设我有一些专门针对每种枚举类型的类:
enum MyEnum {
EnumA = 0, EnumB, EnumSize
};
template <enum MyEnum>
class StaticEnumInfo {
};
template <>
class StaticEnumInfo<EnumA>{
typedef bool type;
const std::string name = "EnumA";
};
template <>
class StaticEnumInfo<EnumB>{
typedef int type;
const std::string name = "EnumB";
};
是否可以遍历所有名称并打印它们? 我想写这样的东西:
for(MyEnum i = EnumA; i < EnumSize; ++i){
// Doesn't make sense, I know.
std::cout << StaticEnumInfo<i>::name << std::endl;
}
我知道我可以在其他地方创建一个映射来解决这种映射(对于字符串,而不是类型......)
我无权使用 boost
【问题讨论】:
-
C++ 还没有反射。如果您搜索如何迭代枚举,您将获得许多解决该问题的方法示例。
-
否 您不能将运行时数据更改为编译时常量。需要一个映射“函数”,所以不妨映射到名称。
标签: c++ templates specialization