コンパイル時のType -> Enum Series
マッピングを行うことは可能ですか?
例を示します。
たとえば、いくつかType
の列挙値があります。
typedef int Type;
enum Enumerated { Enum1, Enum2, Enum3, Enum4 };
そして今、どういうわけか次のよう
にEnum1
述べています。Enum4
Type
ここで、次のことを確認できるようにしたいと考えています (コンパイル時に mpl を使用して実行することをお勧めします)。
任意の型と列挙型が実際に相互にマップされている場合:
template <typename ArbitraryType, Enumerated E>
struct check_at_compile_time {
// Somehow tricky evaluate this
static const bool value;
};
結果は次のようになります。
check_at_compile_time<Type, Enum1>::value evaluates to TRUE
check_at_compile_time<Type, Enum2>::value evaluates to FALSE
check_at_compile_time<Type, Enum4>::value evaluates to TRUE
check_at_compile_time<int, Enum3>::value evaluates to FALSE
誰かがこれを実装する良い方法を知っているなら、私を助けてください。たぶん何かを使用してboost::mpl
いますが、よくわかりません。
ありがとう。