我有一个类,它的行为有点像枚举,它的每个实例都有一个唯一的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
支持。请参阅作用域枚举。