考察了很多文章,模板的分文件编写这样写才正确!
结论:
函数模板只是函数的描述,没有实体,创建函数模板的代码放在头文件中。
函数模板的具体化有实体,编译的原理和普通函数一样,所以,声明放在头文件中,定义放在源文件中。
func.h 头文件
#pragma once
#include<iostream>
using namespace std;
void show(int a, int b); //普通函数声明
//函数模板只是函数的描述,没有实体,所以创建模板函数在头文件的代码要完整
template<typename T>
void show(T a, T b)
{
cout << "函数模板 a+b=" << a + b << endl;
return;
}
//函数模板的具体化,有实体,和普通函数一样,声明可以放在头文件,定义放在源文件
template<>
void show(int a, int b);
func.cpp 源文件
#include"func.h"
void show(int a, int b) //普通函数的定义
{
cout << "普通函数 a+b=" << a + b << endl;
return;
}
//模板函数具体化的定义
template<>
void show(int a, int b)
{
cout << "函数模板的具体化a+b=" << a + b << endl;
return;
}
main.cpp 源文件
#include"func.h"
int main(){
show(5, 6); //调用普通函数
show('a','b'); //调用模板函数
show<>(10, 20); //调用具体化的模板函数
system("pause");
return 0;
}