【发布时间】:2016-12-04 16:38:33
【问题描述】:
是否可以创建一个模板来推断枚举类 value 模板参数的底层枚举类 type?我正在寻找类似以下非工作伪示例的操作:
enum class MyEnumClass { e1, e2, e3 };
template<enum class T X> MyTemplate { // wrong syntax. want to specify X, infer T
using enum_class_type = T;
static constexpr enum_class_type value = X;
};
我希望只用一个参数来实例化,例如MyTemplate<MyEnumClass::e1>:
static_assert( std::is_same<MyTemplate<MyEnumClass::e1>::enum_class_type, MyEnumClass>::value );
static_assert( MyTemplate<MyEnumClass::e2>::value == MyEnumClass::e2 );
我知道以下方法可行,但它需要我明确指定枚举类类型作为第二个模板参数:
template<typename EnumClass, EnumClass X>
struct EnumValue {
using enum_class_type = EnumClass;
static constexpr enum_class_type value = X;
};
// usage: EnumValue<MyEnumClass, MyEnumClass::e1>::enum_class_type
【问题讨论】: