废话不说,先上代码。
// 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 错误。
另外,这种方法只适用于函数模板,类模板中成函数还是要声明和实现在同一文件中。