MumbleArgs args;
args.a = 1;
args.b = 2;
// etc.
m_eventMgr.Raise(IMyEvents::Mumble(&args));
还有一种选择,你可以实现
DEFINE_EVENT3。但是记住:仿函数对象通过值传递的,所以它们应该很小。当可以传递指针时,为什么要在堆区和栈区来回拷贝一大堆参数呢?如果事件处理器需要返回值,也可以借助结构。为了简单起见,我让事件处理器返回
void。 逆@风@者
经常有程序员会问仿函数会不会带来太大的额外开销。事实上,仿函数通常比函数更有效率。理由是它是内联的。当你在 C
中传递指向函数的指针时,即使你将函数定义为内联,它就是一个指针。你不能通过传值的方式来传递一个函数。但是当你传递一个对象实例到某个模板函数时,如果你象那样定义函数,编译器产生的所有东西都是内联的。对于事件来说,通过指针仍然只有一个函数调用,它发生在函数
operator 调用虚拟 OnFoo 处理器的时候。
编程愉快!
您的提问和评论可发送到 Paul 的信箱:cppqa@microsoft.com.
作者简介
Paul DiLascia 是一名自由作家,软件咨询顾问以及大型 Web/UI 的设计师。他是《Writing Reusable
Windows Code in C 》书(Addison-Wesley, 1992)的作者。业余时间他开发 PixeLib,这是一个 MFC
类库,从 Paul 的网站 http://www.dilascia.com 可以获得这个类库。
.
本文出自 MSDN
Magazine 的
March 2006 期刊,可通过当地报摊获得,或者最好是
订阅
本文由 VCKBASE MTT 翻译
本文章更多内容:<<上一页 - 1 - 2 - 3 - 4 |