首页 > 其他分享 >CRTP 和静态多态

CRTP 和静态多态

时间:2024-08-22 15:38:52浏览次数:11  
标签:函数 静态 多态 派生类 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

 

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

 

标签:函数,静态,多态,派生类,CRTP,模板
From: https://www.cnblogs.com/henkenen/p/18373987

相关文章

  • Secure Coding in C and C ++ (四)局部静态构造函数 虚函数
    前言上一章节我们讲解了关于C++静态和指针与引用的部分我们先来回顾一下相关的内容:指针说白了就是地址,inta;int*ptr=&a这里的整形指针就是存放的整数变量的地址静态static有两种层面:第一种层面就是在其他的文件里,如果加入了static修饰那么被修饰的在link......
  • 浅谈面向对象三大特性(着重介绍虚函数实现的多态)
        写在前面:文章内容分享为主,如有不当之处,恳请批评指正。        今天在使用C++的工厂模式的时候,突然发下有些生疏,就想着发一篇博客,巩固一下,但突然想到工厂模式中设计的继承以及多态的特性,决定先发一篇有关于C++多态的文章,其他的就丢给明天吧!一、面向对象三......
  • qt静态编译 全自动编译qt静态库 qt5 windows安装qt (2024.2.23)
    全自动编译qt5静态库(2024.2.23)本教程是从无到有配置qt.io和vcpkg实现全自动编译qt5的静态库,使得您可以静态编译qt项目0.安装VisualStudio2022这个我就不多解释了,直接去官网下载社区版本,勾选使用C++的桌面开发安装好就行1.安装qt.io的开发环境1.1下载在线安装包并且配......
  • AKS (11) AKS挂载NFS File Share (静态创建)
    《WindowsAzurePlatform系列文章目录》 本文介绍的是静态创建存储账户,即用户需要提前创建好存储账户 1.我们首先创建AzureAKS集群,步骤略。我们的AKS集群名称为:aks1-27-9 2.AzureAKS通过NFSFileShare挂载的时候,NFS4.1只支持高级性能层的Azure存......
  • 基础知识|C++|封装、继承、多态
    一、封装、继承、多态是什么封装:将具体实现过程和数据封装成一个函数,只能通过接口进行访问,降低耦合性,使类成为一个具有内部数据的自我隐藏能力、功能独立的软件模块。意义:保护或防止代码在无意之中被破坏,保护类中的成员,不让类中以外的程序直接访问或者修改,只能通过提供的公......
  • rocky8 中配置静态IP
     001、查看系统信息[root@localhost~]#hostnamectlStatichostname:localhost.localdomainIconname:computer-vmChassis:vmMachineID:0f5ac3970da4429fa028c356ef25e662BootID:5012d6e8a2084e5bb03d46166d4550ca......
  • 什么是静态应用程序安全测试 (SAST)?
    静态应用程序安全测试(SAST)是分析和测试应用程序源代码是否存在安全漏洞的过程。软件开发人员使用SAST在软件开发生命周期(SDLC)早期(即应用最终发布之前)查找并修复源代码中的缺陷。SAST的工作原理是什么?SAST是一种白盒测试方法,通过直接面向源代码、字节码和二进制文件,检......
  • Python--面向对象编程:封装、继承和多态
    在面向对象编程(OOP)中,封装、继承和多态是三个核心的概念,掌握它们有助于更好地设计和开发复杂的软件系统。以下是对这三个概念的详细介绍:1.封装(Encapsulation)封装指的是将对象的状态(属性)和行为(方法)隐藏在对象内部,不暴露给外界。外界只能通过对象提供的接口(即公开的方法)来访问......
  • WPF:静态、动态资源以及资源词典
    WPF:静态、动态资源以及资源词典静态资源与动态资源我们常常会使用样式或者控件模板放在Window.Resources中,比如这样:静态资源与动态资源使用如下:<Window.Resources><SolidColorBrushx:Key="SolidColor"Color="#FF0000"/></Window.Resources><Grid><StackPanel......
  • 《深度解读代理模式:静态代理与动态代理的详尽剖析》
    代理模式一、引言在Java开发中,代理模式是一种非常重要的设计模式,它为其他对象提供一种代理,以控制对这个对象的访问,在访问对象和目标对象之间起到中介作用。Java中的代理按照代理类生成时机不同分为静态代理和动态代理,而动态代理又有JDK代理和CGLib代理两种。本文将......