【发布时间】:2013-05-11 10:33:28
【问题描述】:
我知道模板定义应该全部进入头文件 [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。 - 如果我将所有实现放入
.cpp,那么foo1.cpp或foo2.cpp将无法看到bar和nest的定义。
我是否必须在单独的文件之间拆分 bar 和 baz?
[1] 在使用 NVCC 编译 CUDA 代码的 MSVC++ 上,将模板声明为 inline 似乎对我不起作用。
【问题讨论】:
-
将模板声明为内联是什么意思?根据当前答案,将非模板化 baz 定义为内联,它应该可以工作。