显示具体化

对于给定的函数名,可以有非模板函数、模板函数和显示具体化模板函数以及它们的重载版本。

显示具体化的原型和定义应以template<>开头,并通过名称来指出类型。

具体化将覆盖常规模板,而非模板函数将覆盖具体化和常规模板。

#include <iostream>
template<class Any>
void swap(Any& , Any&);

struct Job
{
	char name[40];
	double salary;
	int floor;
};

template<> void swap<Job>(Job&, Job&);
void show(Job&);

int main()
{
	using namespace std;
	cout.precision(2);
	cout.setf(ios::fixed, ios::floatfield);
	int i = 10, j = 20;
	cout << "i, j = " << i << ", " << j << ".\n";
	swap(i, j);
	cout << "Now i, j = " << i << ", " << j << ".\n";

	Job sue = {"Susan Yaffee", 73000.60, 7};
	Job sidney = {"Sidney Taffee", 78060.72, 9};
	cout << "Before job swapping: \n";
	show(sue);
	show(sidney);
	swap(sue, sidney);
	cout << "After job swapping: \n";
	show(sue);
	show(sidney);

	system("pause");
	return 0;
}

template <class Any>
void swap(Any& a, Any& b)
{
	/*
	a = a+b;
	b = a-b;
	a = a-b;
	*/
	
	a = a|b;
	b = a^b;
	a = a^b;
	
}

template<> void swap<Job>(Job& j1, Job& j2)
{
	double t1;
	int t2;
	t1 = j1.salary;
	j1.salary = j2.salary;
	j2.salary = t1;
	t2 = j1.floor;
	j1.floor = j2.floor;
	j2.floor = t2;
}

void show(Job& j)
{
	using namespace std;
	cout << j.name << ": $" << j.salary\
		<< " on floor" << j.floor << endl;
}


这是第三代具体化,编译器不一定支持。如果无法编译通过,提示有多个可用实例,可以将

template<> void swap<Job>(Job&, Job&)替换成void swap(int&, int&)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值