鱼C论坛

 找回密码
 立即注册
查看: 4081|回复: 3

C++实例化问题

[复制链接]
发表于 2013-1-19 11:15:36 | 显示全部楼层 |阅读模式
1鱼币
#include "stdafx.h"
#include <iostream>
using namespace std;
int Num[5];
template <typename T>
void Swap(T &a,T &b);
struct job
{
char name[20];
double salary;
int floor;
};
//template <> void Swap<job>(job &j1,job &j2);
void Show(job &j);
int _tmain(int argc, _TCHAR* argv[])
{
int i=10,y=20;
cout<<"i,j="<<i<<","<<y<<endl;
Swap(i,y);
cout<<"Now i="<<i<<" y="<<y<<endl;
job one={"Mr.qian",213.2,1};
job two={"Mr.qian1",231.2,2};
Show(one);
Show(two);
Swap(one,two);
Show(one);
Show(two);
return 0;
}
template <typename T>
void Swap(T &a,T &b)
{
T temp;
temp=a;
a=b;
b=temp;
}
/*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)
{
cout<<"name:"<<j.name<<"salary:"<<j.salary<<"floor:"<<j.floor<<endl;
}
template <> void Swap<job>(job &j1,job &j2) 和template <typename T>
void Swap(T &a,T &b);
这2个模版之间有什么区别 我把template <> void Swap<job>(job &j1,job &j2)  注释掉以后的结果一样  书上是说是实例化 但是他们得到的结果是一样的 那又有什么区别?求指教

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-19 19:06:42 | 显示全部楼层
实例化:一个通过使用具体值替换模板参数,从模板产生的普通类,函数或者成员函数的过程。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-19 20:15:27 | 显示全部楼层
原来如此啊 (虽然 没怎么看懂:lol  但还是 感叹下)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-20 17:14:48 | 显示全部楼层
template <> void Swap<job>(job &j1,job &j2)
本意是说当函数模板
template <typename T>
void Swap(T &a,T &b);的模板参数是job的时候按第一行中的定义产生函数(一般称这个为特化或实例化)
但是,对于函数模板,特化没有任何价值。因为,你定义一个普通函数效果是一样的。特化或实例化只对类模板有用。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-9 00:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表