对开关/事例使用静态常量类实例



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

最新更新