【问题标题】:Infer enum class type from enum class value template parameter?从枚举类值模板参数推断枚举类类型?
【发布时间】: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&lt;MyEnumClass::e1&gt;:

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++ templates


    【解决方案1】:

    这在 c++17 之前是不可能的,你可以这样做

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

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

    【讨论】:

      猜你喜欢
      • 2018-10-18
      • 1970-01-01
      • 2021-08-05
      • 2012-03-13
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多