是否可以创建一个模板来推断枚举类值模板参数的基础枚举类类型?我正在寻找类似以下无效示例的方法:

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

最佳答案

在c++ 17之前,这是不可能直接实现的

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

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

关于c++ - 从枚举类值模板参数推断枚举类类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40960936/

10-13 05:37