能否不用std::function和std::bind这种复杂的东西帮我实现handler机制
时间: 2024-12-05 12:14:20 浏览: 8
当然可以!我们可以使用函数指针和模板来实现一个简单的handler机制,而不需要使用`std::function`和`std::bind`。下面是一个简单的示例:
```cpp
#include <iostream>
#include <vector>
// 定义一个函数指针类型
typedef void (*Handler)();
// 事件类
class Event {
public:
// 添加处理函数
void addHandler(Handler handler) {
handlers.push_back(handler);
}
// 触发事件
void trigger() {
for (auto handler : handlers) {
handler();
}
}
private:
std::vector<Handler> handlers;
};
// 示例处理函数
void handle1() {
std::cout << "Handler 1 called" << std::endl;
}
void handle2() {
std::cout << "Handler 2 called" << std::endl;
}
int main() {
Event event;
// 添加处理函数
event.addHandler(handle1);
event.addHandler(handle2);
// 触发事件
event.trigger();
return 0;
}
```
在这个示例中,我们定义了一个函数指针类型`Handler`,它指向返回类型为`void`的函数。然后,我们创建了一个`Event`类,其中包含一个`handlers`向量用于存储处理函数。通过`addHandler`方法,我们可以添加处理函数到`handlers`向量中。最后,`trigger`方法会依次调用所有注册的处理函数。
这样,我们就可以实现一个简单的handler机制,而不需要使用`std::function`和`std::bind`。
阅读全文