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 に答える