【发布时间】:2014-08-03 05:10:38
【问题描述】:
我有一个模板类,它上面定义了一个强制转换运算符。当我为 operator+ 定义独立重载时,这似乎没有按预期工作。
template <class TT>
class Mtx
{
private:
MtxView<TT> m_view;
public:
operator const MtxView<TT> &() const { return m_view; }
operator MtxView<TT>() { return m_view; }
...
};
template <class TT> Mtx<TT> operator+(const MtxView<TT> &m1, const MtxView<TT> &m2)
{...}
在下面的测试代码中,使用“+”时出现编译错误,即“二进制表达式的操作数无效”。我原以为演员会允许这个工作。为什么会失败,我该如何解决(不从 MtxView 继承)?
Mtx<float> m1, m2, m3;
...
m1 = m2 + m3;
【问题讨论】:
-
您是否在 Mtx 类中为 operator= 定义了一个重载以获取 MtxView 类型的参数(假设 operator+ 返回一个 MtxView)?
-
如上所述,
operator+返回Mtx而不是MtxView。 -
您的 operator+ 是一个模板。推导参数类型时,函数模板需要完全匹配。从不考虑用户定义的转化。
标签: c++ templates casting operator-overloading