В чем разница между использованием boost :: равенства_компараблей <T>и переопределением оператора bool ==? - PullRequest
0 голосов
/ 05 октября 2019

Когда я использовал бы boost :: равенства_компараблей против переопределения метода T * bool operator==(T const& rhs)?

Вот пример кода.

#include <boost/operators.hpp>

enum class AnEnum : uint64_t;

struct Base : boost::equality_comparable<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 автоматически реализует оператор ==, нокомпилятор пожаловался на отсутствующую ошибку реализации. Зачем мне использовать boost :: равенства_компараблей, когда мне все равно нужно это реализовать?

...