调用可以和定义或申明不在一起
不分离
申明和定义都放在.h
文件中
函数模板
template <typename T>
void testprint(T i)
{
std::cout << i << std::endl;
}
类模板
template <typename T>
class A
{
T data;
void func(){
//definition
}
};
分离
需要在.cpp
文件中添加实例化申明
函数模板
.h
template <typename T>
void testprint(T i);
.cpp
template void testprint<int>(T i); 这里
template <typename T>
void testprint(T i)
{
std::cout << i << std::endl;
}
类模板
.h
template <typename T>
class A
{
T data;
void func();
};
.cpp
template class A<int>; 这里
template <typename T>
void A<T>::func(){
//definition
}
结论
- 可以不分离就不分离了,实在要分离,如果
- 有很多模板函数的目标扩展类都是一样的话,可以把它们写成一个模板类的成员函数,这样在cpp文件中写实例化申明的时候只要对类写就可以,而不用对每个函数都写