美文网首页
(转载)c++中怎么自定义事件监听(回调函数)

(转载)c++中怎么自定义事件监听(回调函数)

作者: 沈祥佑 | 来源:发表于2019-07-18 22:11 被阅读0次

原文出处

#include <iostream>
#include <vector>
using namespace std;
class A 
{
private:
    int a = 5;
    vector<void(*)(int)> funcs;
public:
    void setA(int a_);
    void registerCallback(void(*p)(int));
};

void display(int a) 
{
    cout << "a=" << a << endl;
}

int main()
{
    A a1;
    a1.registerCallback(display);
    a1.setA(7);
    system("pause");
    return 0;
}

void A::setA(int a_)
{
    a = a_;
    for (int i = 0; i < funcs.size(); ++i) {
        funcs[i](a);
    }
}

void A::registerCallback(void(*p)(int))
{
    funcs.push_back(p);
}
image.png

这里用到了函数指针(即指向函数的指针),我们要监听A类中的成员变量a,我们定义A类的时候就增加一个将来要监听a变量的函数指针列表,并增加一个registerCallback函数用于将来添加监听者,在a变化时将监听者列表里的所有监听者都调用一遍;在使用A类对象时,我们只要把一个返回类型、参数列表(签名)符合的函数添加为回调函数即可,如上面当我们运行a1.setA(7)改变a的值时,就会调用了回调函数display,这就差不多是事件监听的思想:首先订阅事件(如这里的把display函数注册为回调函数),然后当事件(这里是a的值变化了)发生时,就会自动调用回调函数实现监听。c#里的delegation和java里的listener大概也就是这样,但可能会更复杂一点。

相关文章

  • (转载)c++中怎么自定义事件监听(回调函数)

    原文出处 这里用到了函数指针(即指向函数的指针),我们要监听A类中的成员变量a,我们定义A类的时候就增加一个将来要...

  • web粘贴文件预览

    1、监听浏览器ctrl+v事件,处理逻辑放在监听回调函数内部 2、通过回调函数中参数,获取clipboardDat...

  • javascript高级-

    函数类型中,比较常用的是匿名函数和回调函数,一般来说,回调函数是以匿名函数的形式来进行表现的。回调函数在事件监听,...

  • Koa学习笔记#1

    Koa的执行过程 背景:JavaScript为了实现异步编程,传统的方式有回调函数、事件监听等。所谓回调函数,就是...

  • js回调与异步编程

    回调与异步编程 一、回调函数的使用场景 异步编程。 事件监听、处理。 setTimeout、setInterval...

  • 异步

    零. 处理异步常见方法 回调函数事件监听发布/订阅promisegenerator函数async/await 一....

  • Javascript异步解决方案的发展历程

    1.回调函数 优点:便于理解缺点:回调地狱,不能捕获错误 2.事件监听 容易理解,可以绑定多个事件,每个事件可以指...

  • Angular笔记 处理异步

    目前常见的异步编程的几种方法:1、回调函数2、Promise3、Rxjs4、事件监听/发布订阅 一、函数回调 回调...

  • JS中的异步操作

    JS中异步编程的方法有: 回调函数 事件监听 发布/订阅 promise generator(ES6) async...

  • iOS音量事件与回调

    添加事件监听 事件回调

网友评论

      本文标题:(转载)c++中怎么自定义事件监听(回调函数)

      本文链接:https://www.haomeiwen.com/subject/exzrlctx.html