相关疑难解决方法(0)

确保模板参数是枚举类

有没有办法确保模板参数是枚举类型?

我知道type_traitsstd::is_enum,但我不希望它匹配常规枚举,只是enum_classes.

想要效果的示例:

enum class EnumClass {};
enum Enum {};
class Class {};

template <typename T>
void Example()
{
    static_assert(/* T is EnumClass */, "`T` must be an enum class");
}

Example<EnumClass>(); // Ok
Example<Enum>(); // Error
Example<Class>(); // Error
Run Code Online (Sandbox Code Playgroud)

我使用的是C++ 11,不幸的是不能再高了(虽然我很想知道解决方案,即使它涉及更新的标准).

可能吗?

c++ template-meta-programming c++11

20
推荐指数
1
解决办法
1759
查看次数

是否可以确定类型是否为范围枚举类型?

是否有类型特征,或者是否可以编写类型特征is_scoped_enum<T>,使得:

  • if T是一个范围枚举,is_scoped_enum<T>::valuetrue
  • 如果T是任何其他类型,is_scoped_enum<T>::value则为false

c++ enums metaprogramming type-traits c++11

16
推荐指数
1
解决办法
744
查看次数