是否可以创建一个模板来推断枚举类值模板参数的基础枚举类类型?我想做类似以下非工作伪示例的事情:
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;
};
Run Code Online (Sandbox Code Playgroud)
我希望仅使用一个参数即可实例化,例如MyTemplate<MyEnumClass::e1>:
static_assert( std::is_same<MyTemplate<MyEnumClass::e1>::enum_class_type, MyEnumClass>::value );
static_assert( MyTemplate<MyEnumClass::e2>::value == MyEnumClass::e2 );
Run Code Online (Sandbox Code Playgroud)
我知道以下方法有效,但它要求我显式指定枚举类类型作为第二个模板参数:
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
Run Code Online (Sandbox Code Playgroud)
在 c++17 之前这是不可能的,你可以这样做
template <auto x>
class MyTemplate {
using enum_type= decltype(x);
static constexpr enum_type value = x;
};
Run Code Online (Sandbox Code Playgroud)
您的用例被引用为新功能的确切原因。看这里
| 归档时间: |
|
| 查看次数: |
1006 次 |
| 最近记录: |