テンプレート定義はすべてヘッダー ファイルに入れる必要があることはわかっています [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から見えなくなります。barnestfoo1.cppfoo2.cpp
別々のファイルに分割する必要がbarありますか?baz
[1] テンプレートを as として宣言してinlineも、NVCC を使用して CUDA コードをコンパイルする MSVC++ ではうまくいかないようです。