从枚举类值模板参数推断枚举类类型
Infer enum class type from enum class value template parameter?
是否可以创建一个模板,以渗透枚举类别的基础类类型 value> value 模板参数?我希望做类似以下非工作伪示例的事情:
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;
};
您的用例被认为是新功能的确切原因。请参阅此处
相关文章:
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 如何注册枚举类型到QJSEngine,以便在脚本环境中使用?
- 通过包装器从 C 访问C++ API 时,如何访问枚举类型
- C++/错误:表达式必须具有整数或无作用域枚举类型
- 如何理解c++中在命名空间内部定义的枚举类型enum
- 在类访问混淆中声明的枚举类型
- 在枚举类型上使用std::max是不是一种糟糕的做法
- C++ 在方程中使用变量;错误:表达式必须具有整数或无作用域枚举类型及其他
- 是否可以使用泛型枚举类型作为函数的参数?
- Visual Studio 2017 生成工具与枚举类型的问题
- 使用枚举类型管理存储顺序
- 如何检查类中定义的枚举类型变量是否被分配给?
- 如何从枚举类型中获取枚举值?
- 为什么C++不为枚举类型提供默认"operator>>"函数?
- 确保枚举类型的键/值在软件Revs之间永远不会更改
- MSVC 1 位枚举类型等于 -1,并且相等性测试失败
- 我们可以专业化类模板的枚举(类型)成员吗?
- 错误:以增量方式填充向量时,表达式必须具有整数或无作用域枚举类型
- 枚举类型的重载>>运算符(工作日)
- C 中的枚举类型字符串类别