分别来自与sourceforge和codeproject
sigslot的运行方式比较容易理解,就是将对象指针和函数指针保存到连表里,然后调用的时候再取出来执行
fastdelegate看他的文档看的一头雾水,看完了也没弄清楚作者说的为啥快和快到哪里去了,只是内存消耗确实变少了
因为他将所有的虚函数,多重继承等的this指针做了个复杂的取实际地址操作,所以他的一次bind只需要8个字节就够了
但是除内存外,没看到会比sigslot快
http://sigslot.sourceforge.net/
http://www.codeproject.com/KB/cpp/FastDelegate.aspx
模板用多了真的很头疼,调试会很累的
fastdelegate算法异常复杂,他把普通函数和静态函数也通过一个horrible_cast封装到一个类,看得头晕
为了追求这么点内存,做了好大的工作啊
基于不同类型的函数指针可以强制类型转换,mfc的begin_message_map也是采用的这种方式,有了这个大杀器,fastdelegate才有了实现可能
float test3(int n,char *p)
{
return n;
}
typedef float (*MyFuncPtr)(int, char *);
MyFuncPtr my_func_ptr = &test3;
float n = my_func_ptr(1,0);
typedef float (*MyFuncPtr2)(int);
MyFuncPtr2 pts =(MyFuncPtr2) my_func_ptr;
n = pts(21);
本文探讨了fastdelegate和sigslot两种C++信号槽实现的差异。fastdelegate通过复杂的算法减少了内存消耗,但并未明显展示出速度优势。sigslot的运行机制相对直观,将对象指针和函数指针保存在链表中。尽管fastdelegate的模板实现令人困惑,其核心在于利用不同类型的函数指针之间的强制类型转换,使得它能够在8字节内完成bind操作。MFC的begin_message_map机制与此类似,为fastdelegate提供了实现基础。
596

被折叠的 条评论
为什么被折叠?



