【发布时间】:2018-06-26 14:18:55
【问题描述】:
根据我的理解,下面的代码不应该编译,因为枚举类必须显式转换为整数类型:
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'])'
如何在不将枚举类转换为标准枚举的情况下解决这个编译问题?
【问题讨论】:
-
void Bar(int someParameters[some_constant])等价于void Bar(int someParameters[])或void Bar(int* someParameters)无论如何。只需放下数组绑定并完成它。 -
数组大小在那里毫无意义,删除它。
-
@IgorTandetnik 只需将您的评论作为答案,我会验证它:)
-
@AndyG 是的,谢谢我编辑了问题
标签: c++ arrays enums static signature