二元运算符重载的模板特化 - 如何解决歧义?

时间:2017-09-03 07:57:40

标签: c++ templates operator-overloading template-specialization

我想要实现的目标

我有一个班级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;
}

这会引起歧义,这是正确的。

但是,如果我不能专门针对这一具体案例,我该如何实施我想要的?

0 个答案:

没有答案