我知道模板定义应该全部进入头文件 [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
.cpp中,则barand的定义nest不能被foo1.cppor看到foo2.cpp。
我必须在单独的文件之间bar进行拆分吗?baz
[1] 在使用 NVCC 编译 CUDA 代码的 MSVC++ 上,将模板声明为inline似乎对我不起作用。