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方法是完全合法的。