具体化和实例化的应用

具体化和实例化都是对函数模板来说的,都必须首先声明函数模板,否则会报错

#include <iostream>
#include <string>
using namespace std;
/*
模板声明 必须包含
*/
template <typename T>
void MySwap(T& a, T& b);


struct NODE
{
	int ID;
	int nAge;
};

//一个对MySwap函数模板的具体化
template <> void MySwap<NODE>(NODE& node1, NODE& node2)
{
	cout << "这是一个模板" << endl;
	int Temp;
	Temp = node2.ID;
	node2.ID = node1.ID;
	node1.ID = Temp;
}

//函数模板定义
template <typename T>
void MySwap(T& a, T& b)
{
	cout << "这是一个具体化" << endl;
	T Temp = a;
	a = b;
	b = Temp;
};
template void MySwap<int>(int& a, int& b);
/*显式实例化,无论后面是否使用了该函数,编译器都会生成一个实例函数,
和模板函数具有相同的功能,显示实例化的函数不能更改函数内容*/

int main(int argc, char* argv[])
{
	int nNum1 = 10;
	int nNum2 = 20;
	double dNum1 = 3.14;
	double dNum2 = 0.618;

	NODE node1 = { 2021,100 };
	NODE node2 = { 2022,200 };

	MySwap(nNum1, nNum2);
	MySwap(node1, node2);
	MySwap(dNum1, dNum2);

	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值