Следуйте этому, поскольку я задаю немного другой вопрос: В чем разница между использованием boost :: равенства_компараблей и переопределенного оператора bool ==?
Вот моя попыткаделать это код.
#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);
};