为嵌套在类中的枚举定义运算符
Defining operators for enums nested within a class
假设我有这个:
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
}
有一篇关于枚举的增量运算符实现的好文章。希望它能帮助你:)
相关文章:
- 如何正确实现和访问运算符的各种自定义枚举器
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- C++:如何在声明枚举类的模板类主体之外定义枚举类?
- C2365 重新定义 VS2019 升级后,以前的定义是外部标头 + lib 的"枚举器"
- 如何在 std::p air 中使用 System::Guid 和自定义枚举?
- 如何理解c++中在命名空间内部定义的枚举类型enum
- 当在基类中定义枚举时,qml中的Q_ENUM未定义值
- 在模板类内部定义的枚举上的嵌套类的部分专用化
- 枚举的复合赋值运算符真的应该根据其关联的算术运算符来定义吗?
- 如何检查类中定义的枚举类型变量是否被分配给?
- 在 FlatBuffer 中使用自定义枚举
- C++:使用后类中的枚举定义
- 不接受C++枚举定义
- 方便地为枚举定义按位运算符,以创建位标志
- 为嵌套在类中的枚举定义运算符
- 为什么在c++枚举定义中需要typedef
- 在类中添加枚举定义会破坏其二进制向后兼容性吗?
- 扩展枚举定义
- 用枚举定义成员函数不需要Include