gpt4 book ai didi

c++ - 如何使用 boost/operators.hpp 自动生成 == 运算符?

转载 作者:行者123 更新时间:2023-11-30 04:43:28 26 4
gpt4 key购买 nike

从这里跟进,因为我问的是一个稍微不同的问题: What's the difference between using boost::equality_comparable<T> versus overriding bool operator ==?

这是我尝试做的代码。

#include <boost/operators.hpp>

enum class AnEnum : uint64_t;

struct Base : boost::equality_comparable<Base, Base> {
std::shared_ptr<AnEnum > units;

std::shared_ptr<int> value;

bool operator ==(Base const& rhs) {
return (*value == *rhs.value)
&& (*units == *rhs.units);
}

friend bool operator == (const Base & lhs, const Base & rhs) {
return (*lhs.value == *rhs.value)
&& (*lhs.units == *rhs.units);
};
};

我希望 Boost 会自动实现运算符 ==,但编译器提示缺少实现错误。如何自动实现以下功能:

bool operator == (const Base & lhs, const Base & rhs);

我将其用作引用:https://www.boost.org/doc/libs/1_71_0/libs/utility/operators.htm#arithmetic

编辑:

如何让 == 运算符自动定义,如下所示:

#include <boost/operators.hpp>

enum class AnEnum : uint64_t;

struct Base : boost::equality_comparable<Base, Base> {
std::shared_ptr<AnEnum > units;

std::shared_ptr<int> value;

friend bool operator == (const Base & lhs, const Base & rhs);
};

最佳答案

boost::equality_comparable<T>期待 T提供operator== , 并提供 operator!=基于此。它不会神奇地知道如何比较任意类。就在那里in the reference you cite - 注意“要求”列和“提供的操作”列中的内容。

boost::equality_comparable<Base, Base>有点毫无意义。 equality_comparable 的双参数形式旨在综合不同类型对象之间的异构比较。

关于c++ - 如何使用 boost/operators.hpp 自动生成 == 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58261272/

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