javascript - C++实现js的事件机制

查看:75
本文介绍了javascript - C++实现js的事件机制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

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

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

解决方案

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

这篇关于javascript - C++实现js的事件机制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆