C++泛型编程与函数模板

 

一、函数模板

1、定义:

代表了一个函数家族,该函数与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。

2、格式

template<typename/classT>//但是建议使用typename,避免和class类混淆

Template <类型1变量1, 类型2 变量2, ….. > 返回类型 函数名(形参表)

{

    函数定义体;

}

 

3、作用域

typedef intT;

template <typenameT>

T Add(Tleft,Tright)

{

    T value = 3.14;//此处的valuedouble类型,局部隐藏了typedef定义的全局T;

    cout<< typeid(value).name() << endl;

    return(left+right);

}//T的作用域在模板形参之后到模板声明或定义的末尾之间使用,遵循名字屏蔽规则。

 

T global ;此处的T是全局的typedef的 int T;

 

4、编译:

模板被一共被编译了两次:

第一阶段:实例化之前,检查模板代码本身,看看模板是否出现语法错误,如:忘记分号或者变量名拼错,并检查参数类型是否匹配,在此阶段,编译器只能检查部分的错误。

第二阶段:实例化期间,只有这个阶段才会发现类型相关的错误,例如:实例化类型不支持某些函数调用。

5、实例化:

template <typenameT>

T Add(T left, T right)

{

    return(left+ right);

}

cout << Add('1', '2')<<endl;//c

cou

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值