2011-07-15 15 views
2

私はそれが有効なC++のコードであるので、以下のコードの意味だろうかを理解しようとしています:C++テンプレートの理解

template<class A> 
class AT 
{ 
    AT(); 
}; 

template<class B> 
AT<B>::AT() 
{} 

誰かが私には、テンプレートのインスタンス化の効果が何であるかを理解するのに役立ちますコンストラクタ?また、実用的なユースケースがあれば、大変感謝しています。

タンク

答えて

4

ここにテンプレートインスタンシエーションはありません。このコードの後半では、単にATクラスのコンストラクタを定義しています。これを行うとき、それは一般的テンプレートのパラメータに同じ名前を使用することに注意してください:

template<class A> 
class AT 
{ 
    AT(); 
}; 

template<class A> 
AT<A>::AT() 
{} 

この構文のための使用は依存関係ループを切断するために、次のようになります。

template<class A> 
class AT 
{ 
    AT(); 
}; 

class Dependent 
{ 
    AT<Dependant> member; // Complete definition of AT is needed here 
}; 

template<class A> 
AT<A>::AT() 
{ 
    Dependent object; // Complete definition of Dependent is needed here 
} 
+0

ただし、テンプレートはどういう意味ですか? – mathk

+0

テンプレートの宣言または定義が後に続くのは...? –

3

テンプレートパラメータの名前重要ではありません。 2番目の部分を

template<class A> 
AT<A>::AT() 
{ } 

と書くと、魔法は消えてしまい、単なるコンストラクタの定義になります。