MST

星途 面试题库

面试题:C++ 中如何使用函数指针实现简单事件驱动

请你设计一个简单的事件驱动模型,比如一个按钮点击事件,使用C++函数指针来实现。需要描述清楚事件的注册、触发以及相应的处理逻辑,并且给出关键代码片段。
42.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 事件注册

    • 定义一个函数指针类型,用于表示事件处理函数。
    • 创建一个容器(例如std::vector)来存储注册的事件处理函数指针。
    • 提供一个注册函数,将事件处理函数指针添加到容器中。
  2. 事件触发

    • 当事件发生(如按钮点击)时,遍历存储事件处理函数指针的容器。
    • 依次调用每个事件处理函数。
  3. 处理逻辑

    • 每个事件处理函数根据自身的逻辑进行处理,比如打印日志、更新界面等。

关键代码片段如下:

#include <iostream>
#include <vector>

// 定义事件处理函数类型
using ButtonClickHandler = void(*)();

// 存储事件处理函数的容器
std::vector<ButtonClickHandler> clickHandlers;

// 事件注册函数
void registerButtonClickHandler(ButtonClickHandler handler) {
    clickHandlers.push_back(handler);
}

// 事件触发函数
void triggerButtonClick() {
    for (const auto& handler : clickHandlers) {
        if (handler) {
            handler();
        }
    }
}

// 示例事件处理函数1
void handleButtonClick1() {
    std::cout << "Button Clicked. Handler 1 executed." << std::endl;
}

// 示例事件处理函数2
void handleButtonClick2() {
    std::cout << "Button Clicked. Handler 2 executed." << std::endl;
}

你可以这样使用上述代码:

int main() {
    // 注册事件处理函数
    registerButtonClickHandler(handleButtonClick1);
    registerButtonClickHandler(handleButtonClick2);

    // 模拟按钮点击事件触发
    triggerButtonClick();

    return 0;
}