64,686
社区成员
发帖
与我相关
我的任务
分享
//这段代码,需要怎么修改。让vs2015可以运行。
for (auto &item : data) {
if (!item.DeSerialize(this)) {
return false;
}
}
// Deserialize data.
bool DeSerializeSize(int32_t *data);
bool DeSerializeSkip(size_t size = 1);
bool DeSerialize(std::string &data);
bool DeSerialize(std::vector<char> &data);
//bool DeSerialize(std::vector<std::string> &data);
template <typename T>
bool DeSerialize(T *data, size_t count = 1) {
return FReadEndian(data, sizeof(T), count) == count;
}
template <typename T>
bool DeSerialize(std::vector<T> &data) {
uint32_t size;
if (!DeSerialize(&size)) {
return false;
} else if (size == 0) {
data.clear();
} else if (size > 50000000) {
// Arbitrarily limit the number of elements to protect against bad data.
return false;
} else if (std::is_same<T, std::string>::value) {
// Deserialize a string.
// TODO: optimize.
data.resize(size);
//for (auto &item : data) {
for (auto item = data.begin(); item != data.end(); item++)
{
if (!DeSerialize(*item)) {
return false;
}
}
} else if (std::is_class<T>::value) {
// Deserialize a tesseract class.
// TODO: optimize.
data.resize(size);
//这段代码,需要怎么修改。
for (auto &item : data) {
if (!item.DeSerialize(this)) {
return false;
}
}
} else if (std::is_pointer<T>::value) {
// Deserialize pointers.
// TODO: optimize.
data.resize(size);
for (uint32_t i = 0; i < size; i++) {
uint8_t non_null;
if (!DeSerialize(&non_null)) {
return false;
}
if (non_null) {
typedef typename std::remove_pointer<T>::type ST;
std::remove_pointer<T>::type *item = new ST;
if (!item->DeSerialize(item)) {
delete item;
return false;
}
data[i] = item;
}
}
} else {
// Deserialize a non-class.
// TODO: optimize.
data.resize(size);
return DeSerialize(&data[0], size);
}
return true;
}