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