CRTP 和静态多态

c++古典面试问题之一:面向对象编程三大特性--封装,继承,多态

c++古典面试问题之二:如何实现多态-- 当基类指针指向派生类对象,并通过这个指针调用在派生类中被重写的虚函数

  

基于上述知识点,今天我们讲下另一种多态实现方式:CRTP (curiously recurring template pattern)

  

  1. 虚函数不好用吗?CRTP有什么不一样特性?

    虚函数方法有查询虚函数表的内存开销,运行时检查类型,属于动态多态;CRTP无运行时的多余开销,在编译时检查类型,为静态多态,对于嵌入式编程,性能上更优

    CRTP主要缺点是代码可读性差,对于不喜欢使用模板人群更是雪上加霜。

 

  1. 如何识别什么是CRTP?

    基类是模板类

     

    派生类将自身作为参数传给模板类

    

 拓展阅读:The cost of dynamic (virtual calls) vs. static (CRTP) dispatch in C++ - Eli Bendersky's website (thegreenplace.net)

文中代码来源:https://github.com/GerdHirsch/Cpp-TemplateFactoryMethod

 

之后学到哪再继续更新。。。

 

posted @ 2024-08-22 15:31  henkenen  阅读(7)  评论(0编辑  收藏  举报