私は列挙型を持っています:
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();
.....
}
このボイラープレートとエラーが発生しやすいコーディングをすべて回避するのに役立つメタプログラミング (テンプレートまたはマクロ) の魔法はありますか?