我有一个枚举类型:
enum class MyEnumType { A , B , C };
我想将这些枚举映射到描述属性;我非常喜欢这种方法:
template <typename T>
struct MyEnumTypeDescription
{
inline const char* get() { static_assert("description not implemented for this type"); };
};
template<>
const char* MyEnumTypeDescription<MyEnumType::A>::get() { return "A"; }
template<>
const char* MyEnumTypeDescription<MyEnumType::B>::get() { return "B"; }
....
有点冗长,但还不错,对吧?
现在,麻烦的部分是当我想在运行时从枚举器获取描述时,这意味着我需要创建一个大开关功能
const char* getDescriptionFromEnumerator( MyEnumType t )
{
case MyEnumType::A:
return MyEnumTypeDescription<MyEnumType::A>::get();
.....
}
是否有一些元编程(模板或宏)魔术可以帮助我避免所有这些样板代码和易于出错的编码?
最佳答案
我建议将其映射到数组:
enum MyEnumType { A , B , C };
const char *pEnumDescription[] = { "A", "B", "C" };
并且基于索引,您可以在运行时获取类型。
const char* getDescriptionFromEnumerator(MyEnumType t)
{
return pEnumDescription[t]; // just one statement instead of switch/case
}