2

问题是我是否可以找到一种方法来对运算符进行参数化重载,而不是

template <class T>
class A
{
   private:
       T m_var;
   public:
       operator T () const { return m_var; }
       const A operator+ ( const A& r_var ) const { return m_var + r_var; }
       const A operator- ( const A& r_var ) const { return m_var - r_var; }
       const A operator* ( const A& r_var ) const { return m_var * r_var; }
       const A operator/ ( const A& r_var ) const { return m_var / r_var; }
   ...........
}

有这样的东西

template <class T>
class A
{
   private:
       T m_var;
   public:
       operator T () const { return m_var; }
       const A operator 'X' ( const A& r_var ) const { return m_var 'X' r_var; }

   ...........
}

其中 'X' 将取值 +、-、*、/,并以这种方式避免重复相同的模式代码。提前致谢。

4

2 回答 2

2

查看boost::operators。它需要您定义 += 和 *=。其余的(+,-,*,/,-=,/=) 由库定义。它也适用于二元运算符。

于 2011-01-30T17:42:03.697 回答
0

这在模板中是不可能的。您将需要编写一个宏。

此外,您不应返回 const 右值,因为在类类型的右值上调用非 const 方法是完全合法的。

于 2011-01-30T17:55:05.913 回答