首页 > 其他 > 详细

【43】学习处理模版化基类内的名称

时间:2014-07-22 23:15:44      阅读:382      评论:0      收藏:0      [点我收藏+]

1、考虑下面的场景,有个类模版template<typename T> Box{}; 内部有个方法XXX,现在子类template<typename T> class BigBox:public Box<T>{},BigBox内部使用方法XXX,考虑出现什么问题?

2、首先一点,类模版产生出来的类之间,没有关系。也就是Box<Book> 与Box<Dog>没有关系。通过指定模版实参,可以产生不同的模板类,也可以全特化一个类,如下:

  template <>

  class Box<Cat>{...},这种情况下,就不再实例化模版类了,Box<Cat>可以声明自己的接口,可能就没有了XXX。那么,问题出现了,BigBox继承Box<T>,但是父类Box<T>可能有接口XXX,也可能没有接口XXX,编译器傻眼了。那么还要不要继承父类Box<T>的XXX方法呢?因为不确定一定有,所以不继承,导致上面的情况编译失败。

3、怎么解决?

  解决办法很简单,就是明确说,我要继承父类Box<T>的方法。

  a、使用this->XXX();

  b、使用using Box<T>::XXX;

  c、使用Box<T>::XXX();

  第三种办法不好,因为会关闭virtual绑定行为。

【43】学习处理模版化基类内的名称

原文:http://www.cnblogs.com/nzbbody/p/3514218.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!