我有一个行为有点像枚举的类,它的每个实例都有一个唯一的int值,该值从0开始并在每个新实例处递增。
class MyEnumLikeClass
{
static int NextId = 0;
static const MyEnumLikeClass FIRST;
static const MyEnumLikeClass SECOND;
const int val_;
public :
MyEnumLikeClass() : val_(NextId++)
{
}
operator int() const
{
return val_;
}
//other methods (usually getters) omitted for clarity
}
我试图在开关盒中使用它,以便我可以做类似的事情
MyEnumLikeClass value;
switch(value)
{
case MyEnumLikeClass::FIRST :
break;
case MyEnumLikeClass::SECOND :
break;
default :
}
我收到“ case值不是常量表达式”错误,这似乎是因为编译器在编译时不知道这些值。
有什么办法可以使它正常工作吗?
最佳答案
case
语句的参数必须是C ++ 11之前的整数常量表达式。最简单的方法是使用const int
或实际的enum
。如果您使用的是C ++ 11,则可以简单地使用内置的enum class
支持。请参见scoped enumerations。