2011-08-09 17 views
5
template<typename T> ClassA 
{ 
    ... 
    ClassA& operator=(const ClassA&); 

    ... 
}; 

// case one: 
template<typename T> 
ClassA<T>& ClassA<T>::operator=(const ClassA &rhs) 
{ ... } 

// case two: 
template<typename T> 
ClassA<T>& ClassA<T>::operator=(const ClassA<T> &rhs) 
{ ... } 

ケース1が正しいと仮定します。オーバーロード演算子=内部テンプレートクラス

質問>理由2のように、関数パラメータリストにClassA<T>を使用する必要がないのはなぜですか?

+0

+1です。 – iammilind

+0

私は、クラスのスコープ内以外のクラステンプレートの名前のテンプレートパラメータを指定する必要があると言われています。ここでfunctionパラメータはclassAのスコープ内にはありません。ひとつの。" – q0987

+0

@ iammilind:あなたは暗黙のために投票しますか? –

答えて

0

関数のパラメータスコープ内にあるとき(戻り型ではない)は暗黙のことです。ネストされたクラスをパラメータ型として使用することも参照してください。

2

ご覧のとおり、いずれのバージョンも動作します。

ClassA<T>::の部分がClassA<T>& ClassA<T>::operator=(const ClassA& rhs)になると、クラス内にあるかのように動作します。たとえば、オペレータはクラスのすべてのメンバにアクセスできます。

戻り値のフルネームを指定する必要があります。なぜなら、この時点ではまだメンバ関数(または演算子)であることがわからないからです。

関連する問題