Могу ли я использовать операторы повышения для генерации функций сравнения для 2 объектов (с разными типами) класса? - PullRequest
2 голосов
/ 24 ноября 2011

Я хотел бы использовать операторы повышения для генерации функций сравнения таким образом:

template <typename T>
class Foo : boost::less_than_comparable<Foo<T>, Foo<T2> > {
    private:
        int bar;
    public:
        template <typename T2>
        friend bool operator<(Foo<T> const& f1, Foo<T2> const& f2) {
            if (typeid(T) == typeid(T2)) {
                return f1.bar < f2.bar;
            } else {
                return sizeof(T) < sizeof(T2);
            }
        }
};

это возможно? Оператору не нужно дружить, если мы можем каким-то образом использовать операторы надстройки, чтобы использовать его для генерации остальных операторов.

1 Ответ

2 голосов
/ 24 ноября 2011

Вы, вероятно, должны просто использовать перегруженный шаблон функции:

template <typename T>
bool operator<(Foo<T> const& f1, Foo<T> const& f2) {
    return f1.bar < f2.bar;
}

template <typename T1, typename T2>
bool operator<(Foo<T1> const& f1, Foo<T2> const& f2) {
    return sizeof(T1) < sizeof(T2);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...