javascript - C++实现js的事件机制
大家讲道理
大家讲道理 2017-04-11 11:17:24
[JavaScript讨论组]

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

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

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

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(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。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号