Генерация операторов сравнения без CRTP - PullRequest
2 голосов
/ 04 февраля 2020

Давайте рассмотрим класс таким образом с оператором less than:

struct Test
{
    int value;
    constexpr bool operator<(const Test& p_rhs) const
    {
        return value < p_rhs.value;
    }
};

Я хотел бы сгенерировать bool operator>(const Test&, const Test&), bool operator<=(const Test&, const Test&) и bool operator>=(const Test&, const Test&) без использования CRTP (или любого другого наследования) на Test класс по стандарту generi c, который также может использоваться в других классах, имеющих bool operator<(const T&,const T&). Я попробовал вот так:

template<typename Lhs, typename Rhs = Lhs>
struct GenerateOtherComparisonsFromLessThan
{
    constexpr friend bool operator>(const Rhs& p_rhs, const Lhs& p_lhs)
    {
        return p_lhs < p_rhs;
    }
    //and rest of other comparison operators
};

struct InstantiateTestComparisons : GenerateOtherComparisonsFromLessThan<Test>
{};

Но похоже, что эти перегрузки не принимаются (по крайней мере, на g cc 8.3 на ideone ).

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