背景:
我想从枚举值创建类型来处理它们与 boost::sml 相关。
所以我想简单地通过提供枚举值来创建一个类型,例如:
template <typename ENUM_T, ENUM_T VAL >
class Bla
{
};
enum A
{
a1,
a2
};
enum B
{
b1,
b2
};
int main()
{
Bla<A::eins> x;
}
但这不起作用,因为我必须在使用此枚举类型的非类型模板参数之前定义枚举值的类型。
任何想法?
从 C++17 开始,可以使用具有自动类型推导的非类型模板参数:
#include <type_traits>
template <auto val>
class Bla
{
static_assert(::std::is_enum_v<decltype(val)>); // constraint parameter types to enums
};
在 C++17 之前,您需要提供非类型参数类型作为另一个模板参数:
template <typename T, T val>
class Bla
…
Bla<A, A::eins> x;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句