我想采用从C++模拟node.js中的EventEmitter机制,只要求能实现显式的回调注册和显式回调触发。有关node.js中的EventEmitter解释和用法在此处我主要想实现一个简化版的事件类,能够调用emit显式的触发事件就够了。这个类主要有2个方法一个是注册回调函数:on(name,callback,callback_args);一个是触发回调函数:emit(name);或者emit(name,callback_args);但是这里的问题是注册回调函数时,回调函数可能有多个参数,触发回调函数时也可以带参数这里该怎么实现呢?
1 回答
繁花不似锦
TA贡献1851条经验 获得超4个赞
一点一点来吧,C++做这件node.js里看来很普通的事情需要费不少功夫。
假使我先不存储这个回调函数,我想以invoke(func, args)的方式达到调用func(args)的效果,我需要这么做:
#include <iostream> template <typename Func, typename... Args> void invoke(Func routine, Args... args) { routine(args...); } void print(int c, double d) { std::cout << c << d << std::endl; } int main(int argc, char** argv) { invoke(print, 3, 3.14); return 0; }
Output: 33.14
如果你想要保存args...和func以备以后调用,那么你需要把args...保存起来,在C++里面推荐的方式是
std::tuple<Args...>, 然后你在从tuple里取出来的时候需要一个generator,然后调用func。
添加回答
举报
0/150
提交
取消