gpt4 book ai didi

C++11 在类中放置枚举类的重载运算符

转载 作者:太空狗 更新时间:2023-10-29 20:09:01 24 4
gpt4 key购买 nike

这是我第一次尝试在我的项目中使用枚举类,但我遇到了一个问题,如果将枚举类放在另一个类中,我将无法编译我的代码。我尝试像我的示例一样定义运算符重载,并且我也尝试在外部进行。如果我将枚举类放在类之外,一切正常。怎么了?如果我在类中使用它,如何重载运算符?

#include <cstdint>

namespace MyNamespace
{
class MyClass
{
public:
enum class MyEnum_t
{
VALUE_0 = 0x0,
VALUE_1 = 0x1,
VALUE_2 = 0x2,
VALUE_3 = 0x4,
VALUE_4 = 0x8
};

inline MyEnum_t &operator|(MyEnum_t lhs, MyEnum_t rhs)
{
return static_cast<MyEnum_t>(static_cast<std::uint8_t>(lhs) | static_cast<std::uint8_t>(rhs));
}
}

int main()
{
MyNamespace::MyClass::MyEnum_t test = MyNamespace::MyClass::MyEnum_t::VALUE_0;

test = MyNamespace::MyClass:MyEnum_t::VALUE_1 | MyNamespace::MyClass::MyEnum_t::VALUE_2;

return 0;
}

最佳答案

枚举类可以在另一个类中,但运算符定义必须在命名空间范围内。

另请注意,运算符正在计算一个新值,因此它无法返回引用,因为引用无法绑定(bind)任何内容。它应该按值返回。

总计:

namespace MyNamespace
{
class MyClass
{
public:
enum class MyEnum_t
{
VALUE_0 = 0x0,
VALUE_1 = 0x1,
VALUE_2 = 0x2,
VALUE_3 = 0x4,
VALUE_4 = 0x8
};
};

inline MyClass::MyEnum_t operator|(MyClass::MyEnum_t lhs, MyClass::MyEnum_t rhs)
{
return static_cast<MyEnum_t>(static_cast<std::uint8_t>(lhs) | static_cast<std::uint8_t>(rhs));
}
}

关于C++11 在类中放置枚举类的重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50254507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com