1

テンプレート クラスの実装は、それが定義されたヘッダー ファイルに含まれている必要があります。このようなクラスの実装は、クラス内または通常 (他のすべてのクラスで行うように) で行う必要がありますが、ヘッダー ファイルだけで行う必要がありますか?

私が通常のアプローチで抱えている問題は、テンプレート定義を前に置く必要があるため、実装が非常に肥大化することです。私は最も一般的な方法を知りたいのですが。

4

1 に答える 1

1

おそらく最も一般的な方法は、クラス定義を記述し、次に実装を別のファイルに記述し、次に#includeヘッダー ファイルの下部に実装ファイルを記述し、コンパイルするファイルにリストしないことです。このように、それらは異なるファイルにありますが、前処理後に定義と宣言が同じファイルにあるため、コンパイラは満足しています。

例:

// header.h

template<typename T>
struct A {
    int dostuff();
};

#include "header.template"

// header.template (not header.cpp, to make it clear that this doesn't get compiled)

template<typename T>
int A::dostuff() { 
   // do stuff
}

プリプロセッサが完了すると、ファイルは次のようになります

template<typename T>
struct A {
    int dostuff();
};

template<typename T>
int A::dostuff() { 
   // do stuff
}
于 2012-04-12T21:18:37.077 に答える