`
tcspecial
  • 浏览: 897225 次
  • 性别: 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 

 

 

 

分享到:
评论

相关推荐

    CRTP技术白皮书.pdf

    CRTP技术白皮书.pdf

    stl_interfaces:用于定义迭代器的C ++ 14和更高版本的CRTP模板

    stl_interfaces Boost.Iterator的iterator_facade和iterator_adaptor部分(现在称为iterator_interface )的更新的C ++ 20友好版本; C ++ 20的view_interface的C ++ 20之前版本; 还有一个名为container_interface...

    ORTP RTP RTCP

    ORTP 很详细的RTP/RTCP控制源代码。 适用与linux window

    SecureCRTPortable

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

    Cisco分组语音与数据集成技术

    3.2.1 CRTP的配置 34 3.2.2 帧中继的考虑因素 35 3.3 排队法 37 3.3.1 FIFO排队法 37 3.3.2 优先级排队法 37 3.3.3 自定义排队法 38 3.3.4 加权公平排队法 39 3.4 PPP增强 41 3.5 数据流整形 43 3.6 资源保留协议 45...

    BinanceExtensionCPP:Binance API的扩展(https

    该设计通过使用诸如CRTP和Params对象之类的方法来试图减少运行时的执行时间。 该库中未使用任何虚拟类/方法。 计划在将来添加更多的性能提升功能。 其中之一是C ++ 20发布后用于字符串连接的constexpr 。依存关系 ...

    structured-additive-IR

    仅将LLVM样式用于MLIR覆盖或CRTP挂钩。 遵循MLIR。特别是,IR属性,类型和操作应通过FileCheck使用文本IR格式进行测试。非红外组件应通过单元测试进行测试。 制作说明 先决条件: 支持C ++ 17的C ++编译器; git,...

    Little-Type-Library:一点元编程和功能库

    CRTP 像普通功能一样的特质 像这样的概念 宏可为模板化类型生成自己的特征 元组像带有方括号表示法的数组 使用类型列表进行类型操作 对于每个元组 谓词 不需要迭代器 算法中允许成员函数 查找退货选项单子 压缩 索引...

    AutoAD:用于AD枚举的简单python脚本

    这个工具是我在业余时间创建的,可以帮助渗透测试人员自动化他们日常工作中要执行的基本枚举步骤,并且可以在AD实验室中使用(CRTP / CRTE / CRTO / Offshore..etc) (扰流器:此工具远非完美。) 安装 git clone ...

    crazyflie-clients-python:用Python编写的Crazyflie主机应用程序和库

    与crazyflie的通信以及用于控制Crazyflie的CRTP协议的实现由项目处理。 安装 请参阅github docs文件夹中的。 官方文件 在我们的网站上查看。 贡献 鼓励每个人通过分叉Github存储库并提出请求或提出问题来为...

Global site tag (gtag.js) - Google Analytics