テンプレート クラスの実装は、それが定義されたヘッダー ファイルに含まれている必要があります。このようなクラスの実装は、クラス内または通常 (他のすべてのクラスで行うように) で行う必要がありますが、ヘッダー ファイルだけで行う必要がありますか?
私が通常のアプローチで抱えている問題は、テンプレート定義を前に置く必要があるため、実装が非常に肥大化することです。私は最も一般的な方法を知りたいのですが。
テンプレート クラスの実装は、それが定義されたヘッダー ファイルに含まれている必要があります。このようなクラスの実装は、クラス内または通常 (他のすべてのクラスで行うように) で行う必要がありますが、ヘッダー ファイルだけで行う必要がありますか?
私が通常のアプローチで抱えている問題は、テンプレート定義を前に置く必要があるため、実装が非常に肥大化することです。私は最も一般的な方法を知りたいのですが。
おそらく最も一般的な方法は、クラス定義を記述し、次に実装を別のファイルに記述し、次に#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
}