C++ 回调函数使用demo
时间: 2024-08-14 17:05:01 浏览: 50
在C++中,回调函数是一种设计模式,它允许你在某个特定的时间点执行预先注册好的函数。这种技术通常用于处理事件、异步操作或作为参数传递给其他函数的行为。下面是一个简单的回调函数示例,假设我们有一个函数`processData`需要在数据处理完成后执行一个回调:
```cpp
// 定义一个基础的数据处理器接口
class DataProcessor {
public:
virtual void process(int data) = 0;
// 这里是回调函数的声明
virtual void onDataProcessed() = 0;
};
// 具体实现类,比如文件处理器
class FileProcessor : public DataProcessor {
private:
int processDataImpl(int data); // 实现部分略去
public:
// 调用处理数据并提供回调
void processAndCallback(int data, std::function<void()> callback) {
callback = [this](void()) { onDataProcessed(); }; // 保存回调
processData(data);
}
// 实现回调函数
void onDataProcessed() override {
std::cout << "Data processing complete.\n";
// 在这里可以添加更详细的后续操作
}
};
int main() {
FileProcessor processor;
// 注册一个回调函数
std::function<void()> onDone = []{ std::cout << "Callback called!\n"; };
processor.processAndCallback(42, onDone);
return 0;
}
```
在这个例子中,`FileProcessor`类继承自`DataProcessor`,并在`processAndCallback`方法中接受一个`std::function<void()>`类型的参数作为回调。当数据处理完毕时,会调用这个回调函数。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)