MST

星途 面试题库

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

请描述如何将 C++ 类成员函数作为回调函数使用。假设存在一个类 `MyClass`,包含成员函数 `callbackFunction`,在另一个函数 `registerCallback` 中如何将 `callbackFunction` 注册为回调函数,并给出必要的代码示例。
22.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 使用函数指针(非静态成员函数)
    • 非静态成员函数有一个隐含的 this 指针参数,不能直接作为普通函数指针使用。需要使用 std::functionstd::bind 来处理。
    • 首先定义类 MyClass
class MyClass {
public:
    void callbackFunction(int value) {
        std::cout << "Callback received value: " << value << std::endl;
    }
};
  • 然后定义 registerCallback 函数,它接受一个 std::function<void(int)> 类型的回调函数:
#include <iostream>
#include <functional>

using namespace std;

void registerCallback(std::function<void(int)> callback) {
    // 模拟调用回调函数
    callback(42);
}
  • main 函数中注册回调:
int main() {
    MyClass obj;
    std::function<void(int)> callback = std::bind(&MyClass::callbackFunction, &obj, std::placeholders::_1);
    registerCallback(callback);
    return 0;
}
  1. 使用静态成员函数
    • 静态成员函数没有隐含的 this 指针,可以直接作为普通函数指针使用。
    • 定义类 MyClass 并包含静态成员函数:
class MyClass {
public:
    static void callbackFunction(int value) {
        std::cout << "Static callback received value: " << value << std::endl;
    }
};
  • 定义 registerCallback 函数,接受一个函数指针类型的回调函数:
#include <iostream>

using namespace std;

typedef void (*CallbackFunction)(int);

void registerCallback(CallbackFunction callback) {
    // 模拟调用回调函数
    callback(42);
}
  • main 函数中注册回调:
int main() {
    registerCallback(MyClass::callbackFunction);
    return 0;
}