温馨提示×

c++ delegate怎样进行事件处理

c++
小樊
87
2024-07-15 23:56:49
栏目: 编程语言

在C++中,可以使用函数指针来实现类似于C#中的delegate功能,从而实现事件处理。以下是一个简单的示例代码:

#include <iostream>
#include <functional>

class Event {
public:
    // 定义一个函数指针类型,用于代表事件处理函数
    typedef std::function<void()> EventHandler;

    // 添加事件处理函数
    void addHandler(EventHandler handler) {
        _handlers.push_back(handler);
    }

    // 触发事件
    void raiseEvent() {
        for (auto handler : _handlers) {
            handler();
        }
    }

private:
    std::vector<EventHandler> _handlers;
};

class Button {
public:
    Event onClick;

    void click() {
        std::cout << "Button clicked!" << std::endl;
        onClick.raiseEvent();
    }
};

int main() {
    Button button;

    // 添加事件处理函数
    button.onClick.addHandler([]() {
        std::cout << "Event handler 1 called!" << std::endl;
    });

    button.onClick.addHandler([]() {
        std::cout << "Event handler 2 called!" << std::endl;
    });

    // 触发事件
    button.click();

    return 0;
}

在上面的示例中,我们通过定义一个Event类来管理事件处理函数,然后在Button类中创建一个Event类型的成员变量onClick来代表按钮的点击事件。通过调用addHandler函数来添加事件处理函数,并在click函数中触发事件。在main函数中,我们创建一个Button对象并添加两个事件处理函数,然后点击按钮触发事件。

0