如何在现代C ++中专门化enum
?
我发现不仅可以为方法提供专业化,还可以为枚举提供专业化。需要注意的是使用基于枚举的枚举或提供虚拟枚举器,其值等于任何特化提供的最大值。这对我来说很有意义,因为可能有其他成员依赖于枚举的基础类型大小。
只要模板类声明为struct
,下面的示例就可以正常工作。一旦我声明它是class
,专业化中提供的枚举器就变得无法访问:
test.cc: In function 'int main()':
test.cc:27:20: error: 'Class<3>::Enum Item' is private within this context
int x = Class<3>::Item;
如何解决这个问题?
template<int i>
struct Class {
public:
enum Enum {
// Stretch underlying type (alternatively: use based enum)
MaxBit = 100
};
enum EnumAlternative: int {
// Like this
};
};
template<>
enum Class<2>::Enum {
Item = 12
};
template<>
enum Class<3>::Enum {
Item = 42
};
int main() {
int x = Class<3>::Item; // Line 27
}
答案 0 :(得分:0)
您需要专注于Class
包含您的Enum
template<>
class Class<2>
{
public:
enum Enum
{
Item = 12
};
};
int main()
{
int x = Class<2>::Item; // x with 12
}
现在我们从C ++ 11开始有constexpr variable,请考虑使用它。