У меня есть тип enum:
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();
.....
}
Есть ли какая-то магия метапрограммирования (шаблон или макрос), которая помогла бы мне избежать всего этого стандартного и подверженного ошибкам кодирования?