据我所知,下面的代码不应编译,因为必须将枚举类显式转换为整数类型:
enum class MyEnum : int {
enumValue = 0,
... ,
COUNT
};
template<typename EnumType>
class MyClass {
void Bar(int someParameters[EnumType::COUNT]) { ... }
};
MyClass<MyEnum> myObject; // compilation error at template instanciation when using an enum class
但是使用这样的强制转换(我本来希望是constexpr),使用Visual Studio 2015会产生奇怪的编译错误(编辑:它与g ++一起使用,因此很可能是VS编译器而不是任何问题其他):
template<typename EnumType>
class MyClass {
void Bar(int someParameters[static_cast<int>(EnumType::COUNT)]);
};
template<typename EnumType>
void MyClass<EnumType>::Bar(int someParameters[static_cast<int>(EnumType::COUNT)]) { ... }
unable to match function definition 'MyClass<EnumType>(int [])' to existing declaration 'MyClass<EnumType>(int ['function'])'
如何在不将枚举类转换为标准枚举的情况下解决此编译问题?
答案 0 :(得分:0)
您可以使用:
template<typename EnumType>
class MyClass
{
public:
void Bar(int (&someParameters)[static_cast<int>(EnumType::COUNT)]);
};
template<typename EnumType>
void MyClass<EnumType>::Bar(int (&someParameters)[static_cast<int>(EnumType::COUNT)])
{}
或者限制较少,只使用指针:
template<typename EnumType>
class MyClass
{
public:
void Bar(int someParameters[]);
};
template<typename EnumType>
void MyClass<EnumType>::Bar(int someParameters[])
{}