なぜC ++のテンプレートは、ヘッダーファイルだけで達成することができますか?

定義し、テンプレートクラスが同じファイル内にある必要があり、通常はヘッダファイルを実装して、コンパイラは、拡張テンプレートを達成するためにテンプレートを表示します。

そのため、テンプレートの初期化、コンパイラは、テンプレートのパラメータに基づいて新しいクラスを作成します。例えば:

FOO {templatestructの
Tバー、
ボイドdoSomethingの(TのPARAM){/ *使用してスタッフT /}行う};
//どこかの.cpp Aに
FOO F、
コードを解析コンパイラは、新しいクラスが作成され、等これは、と等価である:
構造体FooInt {
int型のバー、
ボイドのdoSomething(int型PARAM){/ものを行う使用してINT * /}}
コンパイラは、このケースがintであるような、それらをインスタンス化するテンプレートパラメータを使用する場合、実装アクセス方法を必要とする場合。コンパイラは、テンプレートをインスタンス化することはできませんので、実装は、目に見えない訪問してヘッダファイルにない場合。一般的に用いられている方法は、テンプレートファイル内のこれらのクラスを達成するために、ヘッダファイルのテンプレートで宣言されています。次にファイルは、ヘッダファイルの末尾に特定の実装を含んでいます。例えば
// Foo.htemplate構造体はFoo {
ボイドdoSomethingの(TのPARAM);};

#include「Foo.tpp」

Foo.tpptemplateボイドはFoo :: doSomethingの//(TのPARAM){
//実装}
したがって、実装および宣言は、コンパイラへのアクセスが分離されています。

发布了38 篇原创文章 · 获赞 13 · 访问量 4323

おすすめ

転載: blog.csdn.net/YanWenCheng_/article/details/103994668