不同于一般c++函数,声明可以在头文件,定义可以在cpp文件。
模板函数的声明和定义必须放在一起,否则编译链接会报错。
/* a.hpp */
template <typename T>
T func(T input);
/* 必须也放在a.hpp */
template <typename T>
T func(T input)
{
return input;
}
非要分开写的话,需要在cpp文件中进行模板的显式实例化,但这需要把所有用到的T都列出来。或者在头文件末尾include 这个cpp文件,但这本质和写在一个头文件没有区别,而且由于cpp文件往往没有防止重复include的机制,链接时容易报错重复定义。
参考: