我有一个班级Foo
。我想重载operator+
以便:
foo1 + 10; // left +
10 + foo2; // right +
foo1 + foo2; // specialized
我知道要捕捉左右添加,我必须模仿电话:
template <typename T>
var operator+(const Foo& lhs, const T& rhs){
return lhs.val + rhs);
}
template <typename T>
var operator+(const T& lhs, const Foo& rhs){
return rhs.val + lhs);
}
这完全正常,直到我们必须专注于两个输入都是Foo
的情况:
template <>
var operator+(const Foo& lhs, const Foo& rhs){
return rhs.val + lhs.val;
}
这会引起歧义,这是正确的。
但是,如果我不能专门针对这一具体案例,我该如何实施我想要的?