奇异递归模板模式应用5-静态多态

动态多态:C++动态多态是利用虚函数特性实现的,即基类指针(引用)指向派生类指针(引用)。由于虚函数的实现是在运行期进行的,因而会产生运行期开销(虚表指针偏移,与分支预测器和CPU指令流水线相关)。除此之外,虚函数的存在还会使得每个类中增加一个虚表和指向虚表的指针,这又将导致内存开销。
静态多态:顾名思义,编译时多态,避免虚函数开销。由于基类能够在编译时获得派生类的类型,因此也能在编译时对派生类的函数进行派发。

// 这里为了简化代码,只演示静态多态,故暂未考虑CRTP易错点:派生的基类模板参数不是派生类
template <typename T>
class Animal
{
public:void eat(){static_cast<T *>(this)->eat();}
};class Cat : public Animal<Cat>
{
public:void eat(){std::cout << "猫吃鱼" << std::endl;}
};class Dog : public Animal<Dog>
{
public:void eat(){std::cout << "狗啃骨头" << std::endl;}
};// 由于类型是在编译时确定的,因而多态调用也是在编译时调用的
// 为什么不用template T void eat(T &animal),不是也可以实现静态多态?
// 原因是模板基类可以起到接口类的作用,约束函数参数animal的类型必须派生自Animal
template <typename T>
void eat(Animal<T> &animal)
{animal.eat();
}int main(void)
{Dog dog;Cat cat;eat(dog);eat(cat);system("pause");return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/694907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI推介-大语言模型LLMs论文速览(arXiv方向):2024.02.10-2024.02.15

2024.02.10–2024.02.15&#xff1a; arXiv中发表的关于大语言模型&#xff08;LLMs&#xff09;相关的文章&#xff0c;已经筛选过一部分&#xff0c;可能有的文章质量并不是很好&#xff0c;但是可以看出目前LLM的科研大方向&#xff01; 后续我会从中选择出比较有意思的文章…

【关于深度学习的一些资料】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 动手学深度学习Awesome Deep LearningTensorFlow Official ModelsPyTorch Image ModelsDeep Reinforcement LearningNeural Style Transfer 动手学深度学习 动手学深度学习 https://zh.d2l.ai/chapter_installation/index.…

Java Web(七)__Tomcat(二)

Tomcat工作模式 Tomcat作为Servlet容器&#xff0c;有以下三种工作模式。 1&#xff09;独立的Servlet容器&#xff0c;由Java虚拟机进程来运行 Tomcat作为独立的Web服务器来单独运行&#xff0c;Servlet容器组件作为Web服务器中的一部分而存在。这是Tomcat的默认工作模式。…

Java开发中计算金额时使用什么数据类型?(企业真题)

Java开发中计算金额时使用什么数据类型&#xff1f; 不能使用float或double&#xff0c;因为精度不高。不容许舍入误差 使用BigDecimal类替换&#xff0c;可以实现任意精度的数据的运算。

Java Web(七)__Tomcat(一)

JavaWeb 服务器 介绍 为什么需要&#xff1f; Web服务器是一个应用程序&#xff08;软件&#xff09;&#xff0c;对HTTP协议的操作进行封装&#xff0c;使得程序员不必直接对协议进行操作&#xff0c;让Web开发更加便捷。主要功能是"提供网上信息浏览服务"。Web服…

Web安全之浅见

备注&#xff1a;这是我在2017年在自己的网站上写的文章&#xff0c;今天迁移过来。 昨天去参加了公司组织的一个关于网络安全的培训&#xff0c;了解了很多关于网络安全方面的知识&#xff0c;也才意识到网络安全是一项极其重要的领域。 本篇文章主要聊聊Web安全。不过我对于网…

【 OpenGL 教程06 】 关于着色器(01)

一、说明 着色器是目前做3D图形最流行的方式。而对应的OpenGL操作晦涩难懂&#xff0c;本篇试图参照一些相关解释文档&#xff0c;以及一个代码案例进行分解说明。 二、OpenGL的渲染管线流程 数据传输到显示环节的数据流程。 OpenGL—>顶点处理器—>细分着色—>几何处…

C语言:指针(一)

目录 1.内存和地址2. 指针变量和地址2.1 取地址操作符&#xff08;&&#xff09;2.2 指针变量和解引用操作符&#xff08;*&#xff09;2.2.1 指针变量2.2.2 解引用操作符&#xff08;*&#xff09; 2.3 指针变量的大小 3.指针变量的类型和意义3.1 指针的解引用3.2 指针 -指…

[云] vmware: latency的设置

https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-vm-administration/GUID-F5DAC793-7B13-418F-949E-0CD80CEC5D1E.html Configure the Virtual Machine Latency Sensitivity 如果虚拟机上的业务&#xff0c;需要敏感的网络延迟&#xff0c;就需要设置这个参数来做调整…

【MogDB】将流行的博客系统Halo后端的数据库设置为MogDB

前言 本人的个人博客站点&#xff08;https://www.darkathena.top &#xff09;基于Halo博客系统搭建&#xff0c;该博客系统后端可以配置多种数据库&#xff0c;默认为H2&#xff0c;但是最新版已不建议使用H2&#xff0c;而是建议使用mysql/postgresql等数据库。经验证&…

【PyTorch][chapter 17][李宏毅深度学习]【无监督学习][ Auto-encoder]

前言&#xff1a; 本篇重点介绍AE&#xff08;Auto-Encoder&#xff09; 自编码器。这是深度学习的一个核心模型. 自编码网络是一种基于无监督学习方法的生成类模型,自编码最大特征输出等于输入 Yann LeCun&Bengio, Hinton 对无监督学习的看法. 目录&#xff1a; AE 模型原…

FPGA OSERDESE2

Output Parallel-to-Serial Logic Resources (OSERDESE2) OSERDESE2 在Xilinx 7 系列器件是一款专用的并行至串行转换器,具有特定的时钟和逻辑资源,旨在促进高速源同步接口的实现。每个OSERDESE2模块都包括一个专用的数据串行器和 3 状态控制。数据和 3 态串行器都可以在 SD…

Edwards爱德华STP系列-A1603分子泵使用维修保养说明

Edwards爱德华STP系列-A1603分子泵使用维修保养说明

注意pytorch的原地操作

常见的原地操作&#xff1a;nn.ReLu(inplaceTrue) a torch.randn(2) # tensor([-0.3690, 0.0626]) b a.clone() # tensor([-0.3690, 0.0626]) c a # tensor([-0.3690, 0.0626]) relu nn.ReLu(inplaceTrue)情况1 out relu(a) # tensor([0.0000, 0.0626]) a # tensor([…

前端基础自学整理|DOM树

DOM&#xff0c;文档对象模型&#xff08;Document Object Model&#xff09;&#xff0c;简单的说&#xff0c;DOM是一种理念&#xff0c;一种思想&#xff0c;一个与系统平台和编程语言无关的接口&#xff0c;一种方法, 使 Web开发人员可以访问HTML元素&#xff01;不是具体方…

Flask数据库操作-Flask-SQLAlchemy

Flask中一般使用flask-sqlalchemy来操作数据库。flask-sqlalchemy的使用介绍如下&#xff1a; 一、SQLAlchemy SQLALchemy 实际上是对数据库的抽象&#xff0c;让开发者不用直接和 SQL 语句打交道&#xff0c;而是通过 Python 对象来操作数据库&#xff0c;在舍弃一些性能开销…

NXP实战笔记(四):S32K3xx如何产生中心对称三相六路波形

目录 1、概述 1.1、理论基础 2、RTD实现 2.1、Emios时基配置 2.1.1、EmiosMcl 2.1.2、EmiosCommon 2.2、Emios PWM配置 2.3、TRGMUX 2.4、LCU 2.5、外设信号配置 3、代码实现 4、测试结果 1、概述 电机控制中需要产生三相六路SVPWM进行占空比与周期调制,怎么通过RT…

Nginx----高性能的WEB服务端

一、Nginx介绍 1、什么是Nginx Nginx Nginx是一个高性能的HTTP和反向代理服务器。是一款轻量级的高性能的web服务器/反向代理服务器/电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;单台物理服务器可支持30 000&#xff5e;50 000个并发请求。 一款高性能…

(done) Positive Semidefinite Matrices 什么是半正定矩阵?如何证明一个矩阵是半正定矩阵? 可以使用特征值

参考视频&#xff1a;https://www.bilibili.com/video/BV1Vg41197ew/?vd_source7a1a0bc74158c6993c7355c5490fc600 参考资料(半正定矩阵的定义)&#xff1a;https://baike.baidu.com/item/%E5%8D%8A%E6%AD%A3%E5%AE%9A%E7%9F%A9%E9%98%B5/2152711?frge_ala 看看半正定矩阵的…

C#_值类型与引用类型 及 值参数与引用参数

值类型与引用类型 栈帧和对象内部都维护着符号表&#xff0c;依变量的标识符查询符号表可知地址偏移量 对于成员变量而言&#xff0c;可得相对于所属对象地址的地址偏移量 对于局部变量而言&#xff0c;可得相对于帧指针所指地址的地址偏移量(关于栈指针和帧指针&#xff1a;栈…