跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • Online Tools
  • 用户
  • 群组
折叠
品牌标识

D2Learn Forums

dustchensD

dustchens

@dustchens
关于
帖子
3
主题
1
群组
0
粉丝
0
关注
0

帖子

最新 最佳 有争议的

  • json库的initializer_list创建问题
    dustchensD dustchens

    @SPeak
    按照这个思路,只保留一个列表初始化,用了一个辅助函数检测了每个元素是否是数组,如果是数组就检测长度是否是2,然后首元素是否是string,如果初始化列表里全部元素都符合就判定为object。这个代码运行成功了,感谢大佬

      Json(std::initializer_list<Json> init) {
        if (is_object_list(init)) {
          JsonObject dict;
          for (const auto &el : init) {
            auto pair = std::get_if<JsonArray>(&el.m_value);
            // 必须是长度为2的数组
            assert(pair && pair->size() == 2);
            auto key = std::get_if<std::string>(&(*pair)[0].m_value);
            // 第一个元素必须是字符串
            assert(key);
            dict.emplace(*key, (*pair)[1]);
          }
          m_value = std::move(dict);
        } else {
          m_value = JsonArray(init);
        }
      }
    
      bool is_object_list(std::initializer_list<Json> init) {
        return std::all_of(init.begin(), init.end(), [](const Json &el) {
          auto pair = std::get_if<JsonArray>(&el.m_value);
          if (!pair || pair->size() != 2)
            return false;
          return std::holds_alternative<std::string>((*pair)[0].m_value);
        });
      }
    
  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。
d2learn forums Powered by NodeBB
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 最新
  • 标签
  • 热门
  • Online Tools
  • 用户
  • 群组