2016-12-04 159 views
0

是否有可能创建一个模板,推断枚举类模板参数的基础枚举类类型?我正在寻找像下面这样的非工作伪示例:从枚举类的值模板参数推导枚举类的类型?

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 

回答

2

这是不可能直接到C++ 17,你可以做什么

template <auto x> 
class MyTemplate { 
    using enum_type= decltype(x); 
    static constexpr enum_type value = x; 
}; 

你的用例被引用为新功能的确切原因。见here