2017-01-20 10 views
0

同じトピックで質問がありますが、もっと具体的な質問があります。テンプレートの演算子に型名を渡す

私は個人用のマルチタイプテンプレート容器を作成しています。詳細は重要ではありませんが、ここで私は私のコンテナで使用していた基本的な演算子である:(左辺値として)obj[n]=value;のように値を割り当てるために使用することができるように、独自の型を返す

  • obj[n]

第二のオーバーロードオペレータは私はTALするものである(右辺値として)something=obj[n];と「アレイ」に格納されて取得された値を返すobj[n]をオーバーロードkについて。非常に最小限の例を使用して

は、ここで私のクラスの基本的な外観です:

template <typename T1, typename T2> 
class example 
{ 
    /*some private and public definitions*/ 

    example<T1, T2>& operator[] (int n) 
    { 
     current = n; 
     return *this; 
    } 

    template <typename U> 
    U operator[] (int n) 
    { 
     /*some operations*/ 

     return something; 
    } 
}; 

問題は、私はオーバーロードされた演算子の戻り値をパラメータ化したい、です。

ここでは、明示的に明示的に演算子を呼び出すことによってのみそれを行うことができることを1つの質問をここでstackoverflowで読んでいます。

どうすればこの問題を回避できますか?通常の演算子呼び出しをパラメタライズできない場合は、少なくとも、rvalue演算子[]を実装して、

答えて

1

コードにオーバーロードされる演算子は2つあります。 []演算子と=演算子です。 []をオーバーロードしてrvalueを特別なクラスに戻し、そのクラスがオペレータの左または右に表示されるかどうかによって、その特別なクラスに対してオーバーロード=をオーバーロードすることができます。

関連する問題