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”将采用值+, - ,*,/,并以这种方式避免重复相同的模式代码。提前致谢。

+1

您可以使用宏 – Cameron 2011-01-30 17:30:21

回答

2

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

0

这在模板中是不可行的。你需要编写一个宏。

另外,你不应该返回一个const rvalue,因为在类类型的右值上调用非const方法是完全合法的。