模板成员运算符的double(?)定义

时间:2011-10-11 13:28:24

标签: c++ templates

如果我调查<复杂>来自msvc 2008的标题,我发现每个操作符定义都使用_Other类型模板操作加倍,例如

_Myt& operator+=(const _Myt& _Right)
{   // add other complex
   this->_Add(_Right);
   return (*this);
}
template<class _Other> inline
_Myt& operator+=(const complex<_Other>& _Right)
{   // add other complex
   this->_Add(_Right);
   return (*this);
}

问题是为什么第二个定义不足以满足要求?

PS: 似乎在gcc中只有第二个定义存在,现在我不再担心了。 :)

1 个答案:

答案 0 :(得分:3)

第一个案例还抓住了可转换_Myt的右侧。

class MyComplex {
   // ...
   public:
     operator std::complex<double>() const;
     operator std::complex<float>() const;
};
std::complex<double> i;
i += MyComplex(1,1); // Unambiguously uses the first form.