c++17 新特性要如何修改,让vs2015支持

玉生香 2022-09-22 17:33:25

 //这段代码,需要怎么修改。让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;
  }

 

...全文
117 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuise 2022-09-26
  • 打赏
  • 举报
回复

你写得有问题

玉生香 2022-09-27
  • 举报
回复
@shuise for (auto &item : data) { if (!item.DeSerialize(this)) { return false; } } 这是Tesseract5.2源码。不是我写的
ztenv 版主 2022-09-25
  • 打赏
  • 举报
回复

忘了,有必要回到2015吗?

玉生香 2022-09-26
  • 举报
回复
@ztenv 一直用的vs2015开发的。

64,686

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧