用c++实现一个最基本的事件系统

#include <algorithm>
#include <iostream>
#include <vector>
#include <map>

class EventManager {

private:
    // 一个map,存储 事件名 -> 存放了回调函数的vector。这里假设回调函数都是void (*)(int)类型
    std::map<std::string, std::vector<void (*)(int)> > events;

public:
    EventManager() {}

    // 注册事件及其回调函数的地方
    EventManager* on(std::string event_name, void (*callback)(int)) {

        std::vector<void (*)(int)>* listeners = &events[event_name];

        // if this listener is already registered, we wont add it again
        if (std::find(listeners->begin(), listeners->end(), callback) != listeners->end()) {
            return this;
        }

        listeners->push_back(callback);

        return this;
    }

    // 触发事件对应的回调函数
    bool emit(std::string event_name, int arg) {
        std::vector<void (*)(int)> listeners = events[event_name];

        if (listeners.size() == 0) return false;

        for (int idx = 0; idx < listeners.size(); idx += 1) {
            listeners[idx](arg);
        }

        return true;
    }
};

void callback1(int num) {
    std::cout << "\n";
    std::cout << "callback1-" << num * 2;
}

void callback2(int num) {
    std::cout << "\n";
    std::cout << "callback2-" << num / 2;
}

int main() {
    EventManager* event_manager = new EventManager();
    event_manager->on("event", callback1)->on("event", callback2);

    int eventA = event_manager->emit("event", 100);
    int eventB = event_manager->emit("bad_event", 200);

    std::cout << "\n";
    std::cout << eventA << " " << eventB << "\n";

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值