C++ 事件分发 绑定类函数
时间: 2023-11-14 17:23:25 浏览: 74
simple_message_handler.rar_C++ 消息分发_If...
在 C++ 中,可以使用函数指针或者函数对象来绑定类函数,实现事件分发。
1. 使用函数指针绑定类函数:
```c++
class EventDispatcher {
public:
typedef void (EventDispatcher::*EventCallback)();
void addListener(EventCallback callback) {
m_listeners.push_back(callback);
}
void dispatch() {
for (auto& listener : m_listeners) {
(this->*listener)();
}
}
private:
std::vector<EventCallback> m_listeners;
};
class MyClass {
public:
void onEvent() {
// 处理事件
}
};
int main() {
EventDispatcher dispatcher;
MyClass obj;
dispatcher.addListener(&MyClass::onEvent);
dispatcher.dispatch();
}
```
2. 使用函数对象绑定类函数:
```c++
class EventDispatcher {
public:
template <typename T>
void addListener(T* obj, void (T::*callback)()) {
m_listeners.emplace_back([=]() {
(obj->*callback)();
});
}
void dispatch() {
for (auto& listener : m_listeners) {
listener();
}
}
private:
std::vector<std::function<void()>> m_listeners;
};
class MyClass {
public:
void onEvent() {
// 处理事件
}
};
int main() {
EventDispatcher dispatcher;
MyClass obj;
dispatcher.addListener(&obj, &MyClass::onEvent);
dispatcher.dispatch();
}
```
以上两种方法都可以实现事件分发并绑定类函数,使用哪种方法取决于个人喜好和具体场景。
阅读全文