阅读量:73
在C++中监听多个事件可以使用回调函数或者观察者模式来实现。以下是一些技巧:
- 使用回调函数:可以定义多个回调函数,每个回调函数对应一个事件。当事件发生时,调用相应的回调函数来处理事件。这种方法简单直接,但可能会导致代码混乱,难以维护。
#include
#include
class EventListener {
public:
void registerCallback(std::function<void()> callback) {
callbacks.push_back(callback);
}
void fireEvent() {
for (auto& callback : callbacks) {
callback();
}
}
private:
std::vectorvoid()>> callbacks;
};
int main() {
EventListener listener;
listener.registerCallback([]() {
std::cout << "Event 1 occurred" << std class="hljs-built_in">registerCallback([]() {
std::cout << "Event 2 occurred" << std class="hljs-built_in">fireEvent();
return 0;
}
- 使用观察者模式:定义一个Subject(主题)类和多个Observer(观察者)类,Subject类维护一个Observer列表,当事件发生时通知所有观察者。这种方法将事件处理逻辑与事件监听逻辑分离,使代码更清晰。
#include
#include
class Observer {
public:
virtual void onEvent() = 0;
};
class Subject {
public:
void addObserver(Observer* observer) {
observers.push_back(observer);
}
void fireEvent() {
for (auto& observer : observers) {
observer->onEvent();
}
}
private:
std::vector observers;
};
class Event1Observer : public Observer {
public:
void onEvent() override {
std::cout << "Event 1 occurred" << std class="hljs-keyword">class Event2Observer : public Observer {
public:
void onEvent() override {
std::cout << "Event 2 occurred" << std class="hljs-function">int main() {
Subject subject;
Event1Observer event1Observer;
Event2Observer event2Observer;
subject.addObserver(&event1Observer);
subject.addObserver(&event2Observer);
subject.fireEvent();
return 0;
}
通过以上两种方法,可以实现在C++中监听多个事件的功能。可以根据具体情况选择适合的方法来实现。