`
tcspecial
  • 浏览: 911493 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

crtp

阅读更多

 

 C++ 中可通过虚函数实现运行时多态,还可以实现更高效的静态多态。

 通过把派生类作为基类的模板参数来实现,该方式称为CRTP(Curious Recurring Template Pattern)。

#include <iostream>

using namespace std;

// 中间类
template <class T>
class BaseClass {
public:	
	// 强转,调用指定对象方法
	void Func(){
		static_cast<T&>(*this).funcImpl();
	}

private:
	void funcImpl(){
		cout << "Base class" << endl;
	}
};

// 基类
class Base : public BaseClass<Base> {

};


// 派生类
class Derived : public BaseClass<Derived> {
public:
	void funcImpl(){
		cout << "Derived class" << endl;
	}
};


/// main
int main(int argc, char **argv)
{
	BaseClass<Derived> derv;
	derv.Func();
	
	BaseClass<Base> bas;
	bas.Func();
	
	return 0;
}

 

运行结果:

Derived class

Base class 

 

 

 

分享到:
评论

相关推荐

    【Java设计模式-源码】好奇递归模板模式(CRTP):独特地利用多态性

    在Java中,好奇递归模板模式(CRTP)是一种强大的设计模式,用于实现静态多态性。通过让一个类模板从其自身类的模板实例化中派生,CRTP能够实现方法重写和编译时的多态行为,提高Java应用程序的效率和性能。 ## 二...

    SecureCRTPortable

    SecureCRTPortable 查看后台,用命令进行操作

    PixHawk源码笔记-各种飞控开发.pdf

    CRTP(Crash Resistant Transport Protocol)是一个针对无线通信设计的实时通信协议,特别适用于无人机的远程控制。这部分内容解释了CRTP通信包的数据通道、数据端口以及通信包结构等要点。 15. PC端和安卓端开发...

    Improving Large Vector Operations BLAS, LAPACK, ATLAS with C++

    CRTP是一种用于实现表达式模板的技术,它允许基类访问派生类的私有成员,从而使得模板能够访问其实例化的具体类型的信息。 **使用ATLAS进行优化**: ATLAS(Automatically Tuned Linear Algebra Software)是一个...

    C++动态生成对象

    为了实现"属性注册",可以使用一种叫做元编程的技术,例如使用模板和CRTP(Curiously Recurring Template Pattern,奇异递归模板模式)来创建一个属性系统。每个类可以继承一个属性基类,该基类包含注册属性的方法。...

    计算机编程英语词汇大全.doc

    网络是计算机编程中的一项重要组成部分,相关词汇包括CORBA(通用对象请求中介架构)、cookie(不译)、CRTP(curiously recurring template pattern)等。 7. 其它相关词汇 还有一些其它的词汇,例如概念...

    C++核心指南教程解析

    6. C++语言的高级话题:本书还将介绍C++语言的高级话题,包括模板元编程、SFINAE、CRTP等,帮助读者更好地理解C++语言的深层次特性。 7. 错误处理和调试:本书将介绍C++语言的错误处理和调试技术,包括如何使用异常...

    iterator_facade.pdf

    `iterator_facade`是C++中实现自定义迭代器的有力工具,它通过模板和CRTP简化了迭代器的实现,同时也确保了与标准库的兼容性和高效性。理解和使用好`iterator_facade`可以帮助开发者更方便地创建符合STL标准的迭代器...

    无线多媒体传感器网络中一种自适应的报头压缩机制

    传统的报头压缩方案,如ROHC(Robust Header Compression)和CRTP(Compressed RTP),虽然能在一定程度上降低报头开销,但在动态变化的无线环境中可能无法达到最优性能。因此,针对WMSNs的特性,研究人员提出了一种...

    c++经典代码大全.pdf

    2. C++编程语言的高级知识:C++编程语言也具有许多高级知识,如模板元编程、SFINAE和CRTP等,能够满足复杂的编程需求。 3. C++经典代码大全:该资源提供了关于C++编程语言的经典代码大全,包括了基础知识和高级知识...

    人工智能-机器学习-移动互联网原始码流数据包头压缩算法的设计与实现.pdf

    文章首先概述了数据包头压缩技术的基本概念和发展历程,列举并分析了几种典型的包头压缩技术,如VJHC、IPHC、CRTP和ROHC。这些技术的工作原理各有特点,但都致力于减少数据包头的冗余信息,以提高网络传输效率。 ...

    How to start at once in the PenTest.pdf

    5. eCPPT,eWPT,CRTP,PNPT,CRT,OCP,eWPTX,OSWE,OSE,PCE,CPTX,CREST CPSA,OSCE等:这些是不同组织提供的其他高级认证。 除了理论学习,实践经验同样重要。可以参与以下实验室和CTF(Capture The Flag)...

    2023年网络安全认证.pdf

    10. CRTP (AlteredSecurity): 集中在漏洞管理与修复,帮助安全团队更有效地处理发现的漏洞,并推动安全改进。 11. ACE-T™(Antisyphon): 这是一个专门针对数据泄漏防护的认证,教会你如何防止敏感信息的非法获取和...

    《C++ Templates 全览》

    - **偏锋技巧**: 包括Friend Name Injection、Curiously Recurring Template Pattern (CRTP)、Template Template Parameters (TTPs)、Member Templates等。 - **特殊设计**: 如Tuple、Traits Templates、Expression ...

    TagAccessTest(C++).zip

    4. **CRTP(Curiously Recurring Template Pattern)**:利用C++的模板特化和继承,可以在基类中为派生类提供特定的访问权限。 四、应用场景 标签访问技术在以下场景中特别有用: 1. **设计模式**:如访问者模式...

    Juniper路由产品简介.pptx

    同样,J系列也运行统一的JUNOS软件,提供NAT、状态防火墙、J-Flow计费、IPSec隧道和cRTP等服务。 此外,Juniper在竞争分析中表现出色,他们的产品在高速重路由、GMPLS、BFD、优雅重启、点到多点LSP等领域都有创新。...

Global site tag (gtag.js) - Google Analytics