C++实现js的事件机制

我想采用从C++模拟node.js中的EventEmitter机制,只要求能实现显式的回调注册和显式回调触发。
有关node.js中的EventEmitter解释和用法在此处

我主要想实现一个简化版的事件类,能够调用emit显式的触发事件就够了。
这个类主要有2个方法
一个是注册回调函数:
on(name,callback,callback_args);
一个是触发回调函数:
emit(name);
或者
emit(name,callback_args);

但是这里的问题是注册回调函数时,回调函数可能有多个参数,触发回调函数时也可以带参数
这里该怎么实现呢?


互换的青春
浏览 715回答 1
1回答

繁花不似锦

一点一点来吧,C++做这件node.js里看来很普通的事情需要费不少功夫。假使我先不存储这个回调函数,我想以invoke(func, args)的方式达到调用func(args)的效果,我需要这么做:&nbsp;&nbsp;&nbsp;#include&nbsp;<iostream> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;template&nbsp;<typename&nbsp;Func,&nbsp;typename...&nbsp;Args>&nbsp;&nbsp;&nbsp;void&nbsp;invoke(Func&nbsp;routine,&nbsp;Args...&nbsp;args)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routine(args...); &nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;void&nbsp;print(int&nbsp;c,&nbsp;double&nbsp;d)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;<<&nbsp;c&nbsp;&nbsp;<<&nbsp;d&nbsp;<<&nbsp;std::endl; &nbsp;&nbsp;}&nbsp;&nbsp; &nbsp;&nbsp;int&nbsp;main(int&nbsp;argc,&nbsp;char**&nbsp;argv)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invoke(print,&nbsp;3,&nbsp;3.14);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0; &nbsp;&nbsp;}Output: 33.14如果你想要保存args...和func以备以后调用,那么你需要把args...保存起来,在C++里面推荐的方式是std::tuple<Args...>, 然后你在从tuple里取出来的时候需要一个generator,然后调用func。
打开App,查看更多内容
随时随地看视频慕课网APP