Nebula3中的委托(Delegate)
2009-06-15 21:58
225 查看
April2009增加了不少好东西, 这段时间准备静下心来看看
关于delegate这么个东西, 可能C++程序员很陌生, 但是Callback函数一定听说过吧? 其它两者本质上是一种东西
不过C++对于成员函数的回调实在是.....(别跟我提boost)
曾经用过fastdelegate, 确实不错. 我以为这就是C++中的完美实现了
N3中增加的这个, 不比它差, 代码量更小, 呵呵
对于N3这个面向对象用到变态(同样它也极力的避免使用模板)的引擎来说, 这个简洁却又不简单的实现是最合适的. 虽然这个版本中它只是一个孤零零的类, 不保证以后会大量使用. 通常情况下, UI系统是它发挥最强力的地方吧?
两者的比较, 作者已经说得很明白了:
fastdelegate使用了一个"漏洞", 尽管它在许多C++编译器上都能工作, 但它不符合C++标准
而这个实现呢?跟boost::function和前者相比:
很快
不用动态分配内存
跟C++标准完全兼容
不过N3中只引入一个单参数无返回值的最简单模板, 有兴趣的可以下载完整版本自己研究.
写了一个测试程序, 相信一看就会用了:
关于delegate这么个东西, 可能C++程序员很陌生, 但是Callback函数一定听说过吧? 其它两者本质上是一种东西
不过C++对于成员函数的回调实在是.....(别跟我提boost)
曾经用过fastdelegate, 确实不错. 我以为这就是C++中的完美实现了
N3中增加的这个, 不比它差, 代码量更小, 呵呵
对于N3这个面向对象用到变态(同样它也极力的避免使用模板)的引擎来说, 这个简洁却又不简单的实现是最合适的. 虽然这个版本中它只是一个孤零零的类, 不保证以后会大量使用. 通常情况下, UI系统是它发挥最强力的地方吧?
两者的比较, 作者已经说得很明白了:
fastdelegate使用了一个"漏洞", 尽管它在许多C++编译器上都能工作, 但它不符合C++标准
而这个实现呢?跟boost::function和前者相比:
很快
不用动态分配内存
跟C++标准完全兼容
不过N3中只引入一个单参数无返回值的最简单模板, 有兴趣的可以下载完整版本自己研究.
写了一个测试程序, 相信一看就会用了:
#include "util/delegate.h" using namespace Util; typedef Delegate<int> PrintCallback; void print(int i) { n_printf("function delegate: %d/n", i); } class Console { public: void Print(int i) { n_printf("method delegate: %d/n", i); } }; //------------------------------------------------------------------------------ /** */ void main(int argc, const char** argv) { PrintCallback funcPrint = PrintCallback::FromFunction<&print>(); Console console; PrintCallback methPrint = PrintCallback::FromMethod<Console, &Console::Print>(&console); funcPrint(100); methPrint(200); }
相关文章推荐
- C#中的委托(delegate)用法简介
- IOS开发使用委托delegate在…
- C#委托delegate
- 理解委托(delegate)及为什么要使用委托
- 委托(Delegate)简介
- iphone 使用委托(delegate)在不同的窗口之间传递数据
- 用反射(Reflection)和委托(delegate)分发 switch 操作
- C#不是C++ 之 委托(Delegate)
- 终于会用c#中的delegate(委托)和event(事件)了
- Csharp关键字----delegate(委托)
- iphone 使用委托(delegate)在不同的窗口之间传递数据
- 温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
- 什么是委托(Delegate)
- 【转】委托类(delegate)
- 使用委托(delegate)在不同的窗口之间传递数据
- C#中的委托(Delegate)和事件(Event)
- 事件/委托机制(event/delegate)(Unity3D开发之十七)
- delegate 委托教程
- Unity学习 - C#委托的介绍(delegate、Action、Func、predicate)
- Delegate 和 Event (委托和事件) 推荐