C++回调当时读取文件
时间: 2024-08-14 18:04:48 浏览: 38
在C++中,当涉及到文件操作并且需要异步处理(例如,读取大文件时不阻塞主线程),可以使用回调函数来实现。回调是一种设计模式,它允许你在某个操作完成后执行预先指定的函数。下面是一个简单的示例,展示如何使用回调来读取文件:
```cpp
#include <iostream>
#include <fstream>
// 定义回调函数类型
typedef void (*FileReadCallback)(std::string content);
// 虚拟读文件函数
class FileReader {
public:
virtual ~FileReader() {}
virtual void readFile(const std::string& filename, FileReadCallback callback) = 0;
};
// 实现类,例如ifstream的子类
class AsyncFileReader : public FileReader {
private:
FileReadCallback callback;
public:
AsyncFileReader(FileReadCallback cb) : callback(cb) {}
// 异步读取文件
void readFile(const std::string& filename) override {
std::ifstream file(filename);
if (!file.is_open()) {
std::cerr << "Failed to open file." << std::endl;
callback("");
return;
}
std::stringstream ss;
std::string line;
while (std::getline(file, line)) {
ss << line << '\n';
}
file.close();
// 当读取完成时,调用回调函数并传递数据
callback(ss.str());
}
};
int main() {
// 创建一个异步文件读取实例,并提供回调
FileReader* reader = new AsyncFileReader([](std::string content) {
std::cout << "File read completed: " << content << std::endl;
});
// 开始读取文件
reader->readFile("example.txt");
// 主线程不会阻塞在这里,而是继续执行其他任务
// 当回调函数执行完毕,表示文件已经读取
delete reader; // 别忘了释放资源
return 0;
}
阅读全文