我想用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运算符来生成其余的运算符,那么运算符并不需要成为朋友。
答案 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);
}