テンプレート定義はすべてヘッダー ファイルに入れる必要があることはわかっています [1]。しかし、クラスにテンプレートと非テンプレートの両方がある場合はどうすればよいですか:
// cls.h
class cls {
public:
template <typename U> void bar(U x); // template
void baz(); // non-template
template <typename V> class nest {
};
};
// foo1.cpp
#include "cls.h" ...
// foo2.cpp
#include "cls.h" ...
理想的には、 と は非常に密接に関連しているため、同じファイルに定義bar
したいと考えています。baz
- しかし、ヘッダーのすべての実装をチャックすると、複数定義することになり
baz
ます。 - すべての実装を a にチャックすると、 and
.cpp
の定義はorから見えなくなります。bar
nest
foo1.cpp
foo2.cpp
別々のファイルに分割する必要がbar
ありますか?baz
[1] テンプレートを as として宣言してinline
も、NVCC を使用して CUDA コードをコンパイルする MSVC++ ではうまくいかないようです。