一 概述:
一般而言,当调用函数时,编译器只需看到函数的声明。定义类类型的对象的时候,类定义必须可用,但是成员函数的定义不是必须存在。因此,将类的定义和函数声明放在头文件中,而普通函数和类成员函数的定义放在源文件中。
模板则不同:要进行实例化,编译器必须能访问定义模板的源代码。
二 编译模型
标准C++为编译模板代码定义了两种模型:包含模型(所有编译器支持);分别编译模型(部分编译器支持)。
1.包含模型
例如:
head.h
#ifndef HEAD_H
#define HEAD_H
template<typename T>
void test(T &t1);//声明
#include"head.cpp"//获得test的定义
#endif
2. 分别编译模型:export关键字(部分编译器支持)。