Функциональность std :: rel_ops в качестве базового класса. Это подходящее решение? - PullRequest
0 голосов
/ 14 октября 2010

Я реализовал функциональность пространства имен std :: rel_ops в качестве базового класса шаблона (он определяет все операторы сравнения, используя только операторы <и ==). Для меня немного странно, что это работает (пока) должным образом, также я обеспокоен используемыми «взломами». Может кто-нибудь оценить следующий код и сказать, если мне просто повезло, что он работает или это обычная практика, чтобы делать такие вещи. </p>

template <typename T>
class RelationalOps {
public:

    inline bool operator!=(const T &rhs) const
    {
        const T& lhs = static_cast<const T&>(*this);
        return !(lhs == rhs);
    }

    inline bool operator<=(const T &rhs) const
    {
        const T& lhs = static_cast<const T&>(*this);
        return ((lhs < rhs) || (lhs == rhs));
    }

    inline bool operator>(const T &rhs) const
    {
        const T& lhs = static_cast<const T&>(*this);
        return !((lhs < rhs) || (lhs == rhs));
    }

    inline bool operator>=(const T &rhs) const
    {
        const T& lhs = static_cast<const T&>(*this);
        return !(lhs < rhs);
    }
};

1 Ответ

1 голос
/ 14 октября 2010

Ну, почему бы не использовать Boost.Operators ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...