【C/C++】回调函数

1. 概念

回调函数是一种在程序运行期间通过函数指针调用的函数,它通常用于实现事件驱动、异步通信、消息传递等功能

在回调函数的使用中,当某些事件发生时,系统会调用预先注册好的回调函数,将事件相关的数据传递给回调函数,由回调函数进行处理。这种回调函数的机制常用于异步通信、网络编程、GUI 前端等场景中,常见的回调函数包括事件处理函数、信号处理函数、消息处理函数等。

回调函数通常使用函数指针来进行实现,首先定义一个函数指针类型,然后将回调函数的地址赋值给函数指针,最后在需要注册回调函数的地方将函数指针作为参数传入即可。

在回调函数中,被调用的函数通常称为回调函数(Callback Function),而调用回调函数的函数通常称为回调函数容器(Callback Container)。回调函数容器可以在满足某些条件或事件发生时调用回调函数,以便执行相应的操作。

2. 用法举例

例如,假设有一个程序需要在读取文件完成后执行某些操作,可以将这些操作封装到一个回调函数中,并在文件读取完成后调用该回调函数。示例代码如下:

  • std::function 类型的回调函数
void readFromFile(const std::string& filename, std::function<void()> callback) {
  // 读取文件
  // ...

  // 文件读取完成后调用回调函数
  callback();
}

void onFileRead() {
  std::cout << "File read completed." << std::endl;
}

int main() {
  std::string filename = "example.txt";
  readFromFile(filename, onFileRead);
  return 0;
}

  • 函数指针模式的回调函数
typedef void (*CallbackFunction)();

void readFromFile(const std::string& filename, CallbackFunction callback) {
  // 读取文件
  // ...

  // 文件读取完成后调用回调函数
  callback();
}

void onFileRead() {
  std::cout << "File read completed." << std::endl;
}

int main() {
  std::string filename = "example.txt";
  CallbackFunction callback = &onFileRead;
  readFromFile(filename, callback);
  return 0;
}

你可能感兴趣的:(C++学习,C/C++,c++,c语言,开发语言)