c++高效委托实战历程(fast delegate)

本文介绍了如何使用C++的fast delegate来高效地建立成员函数映射,涉及成员函数指针的复杂性,以及通过宏批量创建和处理函数的方法。虽然过程繁琐,但能实现快速查询调用,适用于大量函数处理场景。
摘要由CSDN通过智能技术生成

 

c++的fast delegate是一个很麻烦的东西,实际上,用处并不大,因为在c++14中,已经直接支持了映射,所以高版本并用不上。所以这个fast delegate只是浅尝辄止即可。

目标:

建立一个map,<code,func*>

func*即由fast delegate来实现。

最终实现:map  <code,fast delegate(固定参数类型)>

可以快速查找调用函数。

问题:

成员函数指针

在 C++ 程序中, 大多数的函数都是成员函数, 是类的一部分. 你不能用普通的函数指针来指向成员函数, 必须使用成员函数指针. 

成员函数指针之间的转换是一个相当灰暗的领域. 在 C++ 标准化的过程中, 对这种转换有过激烈的争论: 是否允许将成员函数指针转换为它的基类或派生类的成员函数指针? 还是直接允许在不相干的两个类之间转换? 在标准委员会还在为他们的想法纠结时, 不同的编译器已经用他们的实现来对这个问题做了不同的回答

成员函数指针为什么这么复杂?

类的成员函数和标准的 C 函数有很大的不同. 除了被声明的参数外, 它还有一个隐藏的指向具体对象的 this 参数. 在不同的编译器中, this 可能被当成一个普通的参数处理, 也可能被特别处理(比如, 在 VC++ 中, this 通常使用 ECX 寄存器进行传递, 这和普通的函数参数有本质的不同). 虚函数还要等到 运行时 才能知道该执行哪一个函数. 即使成员函数是一个非虚拟的函数(real function), 在标准 C++ 中你也没有办法让一个普通函数处理得像成员函数一样: 标准中并没有 thiscall 这样的关键字可以保证调用方式正确. 成员函数和普通函数有天壤之别(成员函数来自火星, 普通函数来自金星).

你可能认为, 成员函数指针像普通函数指针一样, 只是保存了函数代码的起始地址. 这么认为你就错了. 在大多数编译器中, 成员函数指针都比普通函数指针占用的空间要大. 更奇怪的是, 在 Visual C++ 中, 一个成员函数指针可能是 4, 8, 12, 或者 16 字节大小, 这和与之相关的类, 以及编译器的设置相关! 成员函数指针比你想象的更为复杂. 但并不总是这样.

一旦你能将类指针和成员函数指针转换为标准形式, 实现单目标的委托就简单了(虽然很麻烦). 你只需要为不同数量的参数创建模板类就行了.

使用方法:

1.定义需要的东西。


#include <vector>
#inc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值