废话不说,先上代码。
// template_test.h
template <class T>
T MyMax(T a,T b);
template float MyMax(float a,float b);
template int MyMax(int a,int b);
// template_test.cpp
#include "template_test.h"
#include <iostream>
using namespace std;
template <class T>
T MyMax(T a,T b)
{
cout<<typeid(a).name()<<endl;
return (a>b)?a:b;
}
#include "template_test.h"
#include <iostream>
using namespace std;
int main()
{
int a=1,b=2;
cout<<MyMax<int>(a,b)<<endl;
getchar();
return 0;
}
原因应该是编译器在编译cpp中函数定义的时候要生成obj文件,如果不加头文件加重的两行,编译器无法确定具体类型,所以最后调用的时候出现unresolved externals 错误。
另外,这种方法只适用于函数模板,类模板中成函数还是要声明和实现在同一文件中。