MST

星途 面试题库

面试题:C++中如何实现类成员回调函数的异步调用基础方式

在C++中,假设有一个类`MyClass`,其中包含一个成员函数`callbackFunction`作为回调函数。请描述使用`std::thread`和`std::function`来实现异步调用这个类成员回调函数的基本步骤,并编写一个简单的示例代码。
31.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 基本步骤

    • 包含必要的头文件,即<iostream>用于输入输出,<thread>用于线程操作,<functional>用于std::function
    • 定义MyClass类,在类中定义callbackFunction成员函数。
    • 在类外定义一个静态成员函数或者自由函数,该函数作为线程执行的入口,在这个函数内部调用类的成员函数callbackFunction。这里可以使用std::function来存储类成员函数指针,以便通过对象实例调用。
    • main函数中创建MyClass对象实例,然后使用std::thread来异步调用前面定义的静态成员函数或者自由函数,并传入类对象实例和必要的参数(如果callbackFunction有参数)。
    • 调用std::threadjoin方法等待线程执行完毕。
  2. 示例代码

#include <iostream>
#include <thread>
#include <functional>

class MyClass {
public:
    void callbackFunction(int num) {
        std::cout << "Callback function called with value: " << num << std::endl;
    }
};

// 静态成员函数作为线程入口
static void threadEntry(std::function<void(int)> func, int num) {
    func(num);
}

int main() {
    MyClass obj;
    std::function<void(int)> callback = std::bind(&MyClass::callbackFunction, &obj, std::placeholders::_1);
    std::thread t(threadEntry, callback, 42);
    t.join();
    return 0;
}