文档章节

多态的静态绑定(CRTP手法)

梦想游戏人
 梦想游戏人
发布于 2016/05/20 16:28
字数 176
阅读 35
收藏 0

Curiously Recurring Template Pattern (CRTP手法)

原理很简单

通过模板函数 的强制转换调用子类同名函数,来模拟多态的动态绑定,实现和虚函数一样的功能,并且避免了动态绑定所带来的性能开销


template <class T>
class A
{
public:
	void func(){ ((T*)this)->funcImpl(); };
	void funcImpl(){}
};

class B:public A<B>
{
public:
	void funcImpl(){ cout << __FUNCTION__ << endl; }
};



int main(int argc, char *argv[])
{
 
	A<B> *a = new B;
	a->func();

	system("pause");
	return 0;
}

虽然模拟了一部分场合的虚函数的功能,但也不能完全替代虚函数来实现多态,因为这是模板,子类类型早已经决定了,有点类似语法糖

 

 

© 著作权归作者所有

上一篇: C# ref 和 out
下一篇: 再谈虚表
梦想游戏人
粉丝 41
博文 461
码字总数 132517
作品 0
成都
私信 提问
奇异递归模板模式( Curiously Recurring Template Pattern,CRTP)1

1.CRTP介绍 奇异递归模板模式(curiously recurring template pattern,CRTP)是C++模板编程时的一种惯用法(idiom):把派生类作为基类的模板参数。更一般地被称作F-bound polymorphism,是...

gfsfg8545
2017/06/25
0
0
C++编程模式CRTP

CRTP ,curiously recurring template pattern 神奇的复发模板范式,recurring实在不好翻译,没有合适的词汇,意思是继承的父类是个模板类,参数是自己。上代码看一下吧: 目的是啥呢?主要解...

lieefu
2016/12/29
98
0
开源基于asio的网络通信框架 - asio2

开源基于asio的网络通信框架asio2,支持TCP,UDP,HTTP,RPC,SSL,跨平台,支持可靠UDP,支持TCP自动拆包,TCP数据报模式等 C++开发网络通信程序时用asio是个不错的选择,但asio本身是一套函数集,自...

zhllxt
06/05
1K
1
C++学习笔记(15)——静态绑定与动态绑定

本博客( http://blog.csdn.net/livelylittlefish )贴出作者(三二一、小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! 静态绑定与动态绑定 静态绑定:编译时绑定,通过对象调用 ...

晨曦之光
2012/03/09
229
0
《JAVA编程思想》学习笔记——第八章 多态

在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征 多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来。多态不但能够 方法调用绑定 将一个方法调用同一个...

lixiaocheng18
2017/02/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
56分钟前
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部