C++ 模板类和友元

模板类的友元分三类:

1,非模板友元。

2,约束模板友元,即友元的类型取决于类被实例化时的类型。

3,非约束模板友元,即友元的所有具体化都是类的每一个具体化的友元。

 

1,模板类的非模板友元函数

count()函数不是通过对象调用的(它是友元不是成员函数),也没有对象参数,那么它如何访问hasfriend对象?

它可以访问全局对象;可以使用全局指针访问非全局对象;可以创建自己的对象;可以访问独立于对象的模板类的静态数据成员。

 

report()本身并不是模板函数,而只是使用一个模板作为参数,这意味着必须要为使用的友元定义显式具体化。

 

 

2,模板的约束模板友元函数

约束模板友元函数是在类外面声明的模板的具体化。

 

首先在类定义的前面声明每个函数模板。

然后,在函数中再次将模板声明为友元。声明中的<>指出这是模板具体化。

最后,为友元提供模板定义。

 

 

3,模板类的非约束模板友元函数

通过在类内部声明模板,可以创建非约束友元函数,即每个函数具体化都是每个类具体化的友元。对于非约束友元,友元模板类型参数与模板类类型参数是不同的。

此处的show() 函数具体化为:

void show< manyfriend<int> &, manyfriend<double> & > (manyfriend<int> & c, manyfriend<double> & d) ;

 

 

类模板的别名

C++11 允许将语法using = 用于模板,用于非模板时,这种语法和常规typedef 等价:

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值