2012-04-12 5 views
1

テンプレートクラスの実装は、定義されているヘッダーファイルに含める必要があります。そのようなクラスの実装は、クラス内でも正規でも(他のすべてのクラスと同じように)、ヘッダーファイル内で行う必要がありますか?C++:テンプレート実装(コードスタイル)

通常のアプローチで問題となっているのは、テンプレート定義をinfrontにする必要があるため、実装が非常に肥大化するということです。私はどちらが最も一般的な方法であるか知りたいと思います。

+0

コードスタイルの質問がSOに行っていないに見えます。 – ildjarn

+0

インスタンス化されるすべての型がわかっていて、その.cppファイルでインスタンス化すると、実装はcppファイル内に存在する可能性があります。 –

+0

可能な複製http://stackoverflow.com/questions/8662517/do-template-class-member-function-implementations-always-have-to-go-in-the-heade/8662746#8662746 –

答えて

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 
} 

よう
+0

私は通常接尾辞 '.inl'を見ましたが、' .h'でも '.cpp'でもない限り重要ではありません。 –

+0

Boostはこのシナリオで '.ipp'を使います。 – ildjarn