为嵌套在类中的枚举定义运算符

时间:2015-11-17 01:23:56

标签: c++ enums operator-overloading

说我有这个:

class Example {
    enum class E { elem1, elem2 };
    E& operator++(E& e) {
        // do things
    }
};

似乎很有意义,我甚至看到它在other questions中使用,但编译器告诉我参数只能是空的或者是int。

这在正常的课程中是有意义的,但是当我没有this值时,我应该操作的是什么?

2 个答案:

答案 0 :(得分:2)

您在类中定义的运算符适用于类Example,因此参数和返回类型E&不正确,编译器会告诉您。

标准告诉我们:

  

运算符函数应该是非静态成员函数或者是非成员函数[...]

它不能是E的非静态成员函数,因此它必须是非成员函数。

您可以在Example之外定义运算符,如下所示:

Example::E& operator++(Example::E& e) {
    // modify e
    return e ;
}

答案 1 :(得分:0)

正如@Shafik所回答的那样,你可以声明一个枚举的运算符,这个枚举在类中声明为非成员函数,如下所示:

class Example 
{
public:
    enum class Element
    { 
        Element1, 
        Element2
    };
};

Example::Element operator++(Example::Element element)
{
     // do things
}

关于枚举的增量运算符的实现有一个很好的post。希望它能帮助你:))