MST

星途 面试题库

面试题:C++类成员函数作为回调函数的基础实现

请简述将C++类成员函数作为回调函数的一般步骤,并给出一个简单示例代码,示例中类至少包含一个成员变量和一个成员函数,该成员函数作为回调函数被调用。
20.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

步骤

  1. 定义类:包含成员变量和需要作为回调函数的成员函数。
  2. 将成员函数指针转换为合适的函数指针类型:由于成员函数有一个隐含的 this 指针,普通函数指针无法直接指向成员函数,需要使用 std::function 或者 std::mem_fn 等工具来处理。
  3. 注册回调函数:将转换后的函数指针传递给需要设置回调的地方。

示例代码

#include <iostream>
#include <functional>

class MyClass {
public:
    MyClass(int value) : data(value) {}

    void callbackFunction() {
        std::cout << "Callback function called. Data: " << data << std::endl;
    }

private:
    int data;
};

// 模拟一个接受回调函数的函数
void someFunction(std::function<void()> callback) {
    callback();
}

int main() {
    MyClass obj(42);
    // 使用 std::mem_fn 将成员函数指针转换为 std::function
    std::function<void()> callback = std::mem_fn(&MyClass::callbackFunction)(obj);
    someFunction(callback);

    return 0;
}