原则43:学习处理模版化基类内的名称

本原则还是面向模版类编程而言的。
其实本原则内容主要是针对这么一种情况。你的父类是一个模版类不在编译期是无法具体化的,这样编译器就无法确切得知这个时候的父类具体长成啥样,而一般来讲泛型肯定是要被特化的,就是具体化。你要知道一旦一个东西被具体化它就往往失去了通用性,那么这时你的一个具体的子类要继承一个抽象的模版父类,具体化以后这个具体的子类和这个具体的父类之间能否很好的对接,编译器不敢保证,因此编译器默认的选择拒绝调用父类成员函数。
为了解决这个问题,你就要显式地告诉编译器你就要这么干,于是作者提出三种解决方法。1、使用this指针显式指出;2、使用using声明式;3、父类名+域操作符。





不过如果你调用的virtual函数,这样做会导致virtual的动态绑定行为失败。
但是,我在VS上做了一个实验,就是用一个具体类去继承一个模版类。如果不对子类进行完全特化的话编译根本通不过,而在写语句的时候并没有提出错误或者警告,这说明C++编译器最起码VS是在编译期进行特化的。这说明本原则所讲之方法多多少少有些过时,或者在你不经意间编译器已经帮你拦截了错误。
总结一下作者的观点:
可在子类中通过this或者其他修饰符来显式指定模版父类的成员。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,268评论 19 139
  • 《Effective C++ 中文版 第三版》读书笔记 条款 43:学习处理模板化基类内的名称 我们需要一个程序,...
    赵者也阅读 297评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,569评论 25 709
  • 我重临世界之日,诸逆臣皆当死去 或许是不知梦的缘故,流离之人追逐幻影 从别后,忆相逢,几度魂梦与君同
    陌上阡虹阅读 301评论 0 0
  • 午后,攀爬大奇山,沿溪而行。 途中多激水磨就圆石,古树伫立,虽无层林尽染,仍不乏花开叶红。几多碧潭,清澈无杂,见之...
    甬江小泥鳅阅读 212评论 0 1