C++函数模板声明和定义分离的方法

时间:2022-07-30 23:17:13

    废话不说,先上代码。

// 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 错误。

     另外,这种方法只适用于函数模板,类模板中成函数还是要声明和实现在同一文件中。