我可以使用boost运算符为2个对象(具有不同类型)的类生成比较函数吗?

时间:2011-11-23 23:06:25

标签: c++ templates boost

我想用boost operators以这种方式生成比较函数:

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);
            }
        }
};

有可能吗?如果我们可以以某种方式使用boost运算符来生成其余的运算符,那么运算符并不需要成为朋友。

1 个答案:

答案 0 :(得分:2)

您应该只使用重载的函数模板:

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);
}