模拟curl的回调函数实现返回结构体
#include <iostream>
#include <vector>
// 自定义数据结构
struct MyData {
int value1;
int value2;
};
// 回调函数
size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid) {
std::vector<MyData>* dataVector = static_cast<std::vector<MyData>*>(lpVoid);
if (dataVector == nullptr || buffer == nullptr) {
return -1;
}
// 计算接收到的 MyData 结构体的数量
size_t numStructs = size * nmemb / sizeof(MyData);
MyData* dataPtr = static_cast<MyData*>(buffer);
// 将接收到的 MyData 结构体添加到向量中
for (size_t i = 0; i < numStructs; ++i) {
dataVector->push_back(dataPtr[i]);
}
return nmemb;
}
int main() {
// 模拟接收自定义数据结构数组
MyData dataArray[] = {{1, 2}, {3, 4}, {5, 6}};
size_t size = sizeof(MyData); // 每个数据单元大小为 sizeof(MyData)
size_t nmemb = sizeof(dataArray) / sizeof(dataArray[0]);
std::vector<MyData> receivedData;
OnWriteData(dataArray, size, nmemb, &receivedData);
// 输出接收到的数据
for (const auto& data : receivedData) {
std::cout << "Value1: " << data.value1 << ", Value2: " << data.value2 << std::endl;
}
return 0;
}
- 把
lpVoid
转换为std::vector<MyData>*
类型的指针,这样就能将接收到的MyData
结构体存储到向量中。 - 计算接收到的
MyData
结构体的数量,通过size * nmemb / sizeof(MyData)
来实现。 - 把接收到的
MyData
结构体逐个添加到向量中。
在main函数调用中,
- 模拟了一个
MyData
结构体数组dataArray
。 - 调用
OnWriteData
函数来处理数据。 - 输出接收到的
MyData
结构体的成员值。