为了账号安全,请及时绑定邮箱和手机立即绑定

C++实现js的事件机制

C++实现js的事件机制

互换的青春 2018-08-09 09:10:27
我想采用从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。


查看完整回答
反对 回复 2018-09-19
  • 1 回答
  • 0 关注
  • 714 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信