C++实现js的事件机制

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

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

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

阅读 3.8k
1 个回答

一点一点来吧,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。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题