模板-继承-具现化

本文介绍了C++中一个独特的模板继承和具现化示例,通过`NewHandlerSurpport`类展示了如何利用模板确保每个继承子类拥有独立的静态数据。详细解析了`NewHandlerSurpport`的设计,以及其背后的"怪异的循环模板模式",强调了这种模式在避免共享静态成员数据上的作用。《Effective C++》的这一条款揭示了C++中鲜为人知的技巧,对于深入学习C++有极大帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在学习effective c++中的第49个条款时,遇到一个模板继承的方法,让我打开眼界,感慨万千啊!

具体的代码如下:

怎么样?看了上面的代码,大家是否有些迷惑?首先,类NewHandlerSurpport采用的模板类的定义,其内部却没用到类型T;其次,它的子类在继承时,用了class Test : public NewHandlerSurpport<Test>的方式,将自身作为模板类型参数。怪哉怪哉!一般情况下,大家会不采用模板类来定义NewHandlerSurpport,而且子类直接继承即可,为什么要这样大动干戈,而又好像多此一举呢?

原来,这么做也是有深意的!因为父类中定义的是静态函数和静态变量,这样按照逻辑,每个继承它的子类都应该独享一份静态数据,也就是独享一份父类,这又怎么实现呢?哈哈,正如上面的模式,让基类是模板类,子类继承是采用子类类型作为模板参数,这样在代码编译时不同的继承类就将父类具现化成各自所属的父类,也就是说各自有一份具现化后的父类的拷贝的代码块,各自具有自己所属的静态成员数据和函数,而不会共用一份,有点绕口了!呵呵!相信聪明的呢已经理解了我的意思!这种奇特的方式叫做“怪异的循环模板模式”,在《effective c++》中叫做“do it for me ”,not do it for others!这个名字更贴切些!

 

发现《effective c++》的内容真是博大精深啊,这也是我看的时间最长的一本书了!而且每次温习都有收获!

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值