模板类与友元函数

模板的友元可以分为三类:

  • 非模板友元
  • 约束模板友元,即友元的类型取决于类被实例化时的类型
  • 非约束模板友元,即友元的所有具体化都是类的每一个具体化的友元

1. 模板类的非模板友元,即该友元函数不存在模板,但是该友元函数声明于一个模板类中。


图1

如果没有需要模板类参数,这与普通的类中的友元函数没啥差别。


图2

图3

由于 不存在对象A,而只存在A<T> 即该模板类的一个实例,所以上图中是一个错误的事例,机会出现图三所示的相关提醒。


图4

如果该友元函数需要该模板类参数,就将与约束模板友元类似了。因为该函数将与实例化的模板相关。


2. 约束模板友元,即该友元函数自身是一个模板函数,并且受到该模板类的约束。


图5

需要在模板类之前声明模板函数。图5中可以看出,友元函数均与每一个具体的实例化相关,即会根据模板类中的类型T变换而变换。 


3. 非约束模板友元,该友元函数存在模板,但是并不受该模板类的约束。


图6

该模板友元函数的声明放在了模板类中,且该友元函数模板类型与模板类的类型并没有相同之处,也就不会受到模板类的约束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值