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