2016-12-04 141 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