函数模板和类模板成员函数的定义通常放在头文件中

今天写程序时,将函数模板的声明和定义分开放在头文件和.cpp文件中,发生了连接错误。上网查看资料和查看《C++ PRIMER 5》P582发现,:

函数模板和类模板成员函数的定义通常放在头文件中,除非使用export关键字实现分离。


下面是《C++ PRIMER 5》的原文(P582):

关键概念:模板和头文件

模板包含两种名字:

1.那些不依赖于模板参数的名字。

2.那些依赖于模板参数的名字。

    当使用模板时,所有不依赖于模板参数的名字都必须是可见的,这是由模板的提供者来保证的。而且,模板的提供者必须保证,当模板被实例化时,模板的定义,包括类模板的成员的定义,也必须是可见的。

    用来实例化模板的所有函数、类型以及与类型关联的运算符的声明都必须是可见的,这是由模板的用户来保证的。

    通过组织良好的程序结构,恰当使用头文件,这些要求都容易满足。模板的设计者应该提供一个头文件,包含模板定义以及在类模板或成员定义中用到的所有名字的声明。模板的用户必须包含模板的头文件,以及用来实例化模板的任何类型的头文件。

原文地址:https://www.cnblogs.com/cnsec/p/3789825.html