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

Defining operators for enums nested within a class

本文关键字:枚举 定义 运算符 嵌套      更新时间:2023-10-16

假设我有这个:

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

看起来很有道理,我甚至看到它在其他问题中使用,但编译器告诉我参数只能是空的或int。

这在普通类中是有道理的,但当我没有this值时,我应该对什么进行操作?

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

标准告诉我们:

操作员函数应为非静态成员函数或非成员函数[…]

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

您可以在Example之外定义操作员,如下所示:

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

当@Shafik回答时,您可以为仅在类内部声明为非成员函数的枚举声明运算符,如下所示:

class Example 
{
public:
    enum class Element
    { 
        Element1, 
        Element2
    };
};
Example::Element operator++(Example::Element element)
{
     // do things
}

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