模板类的实现必须包含在定义它的头文件中。这样的类的实现应该在课堂上还是常规的(就像你对其他所有类一样)但只在头文件中完成?
常规方法的问题是实现变得非常臃肿,因为您需要将模板定义放在前面。我想知道哪种方法是最常见的。
模板类的实现必须包含在定义它的头文件中。这样的类的实现应该在课堂上还是常规的(就像你对其他所有类一样)但只在头文件中完成?
常规方法的问题是实现变得非常臃肿,因为您需要将模板定义放在前面。我想知道哪种方法是最常见的。
可能最常见的方法是编写类定义,然后在另一个文件中编写实现,然后#include
将实现文件放在头文件的底部,并且不要将其列在要编译的文件中。这样它们在不同的文件中,但编译器很满意,因为预处理后定义和声明在同一个文件中。
例子:
// header.h
template<typename T>
struct A {
int dostuff();
};
#include "header.template"
// header.template (not header.cpp, to make it clear that this doesn't get compiled)
template<typename T>
int A::dostuff() {
// do stuff
}
预处理器完成后,文件看起来像
template<typename T>
struct A {
int dostuff();
};
template<typename T>
int A::dostuff() {
// do stuff
}