首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++以xml或json格式从包含boost::any的映射中读取和写入数据

C++以xml或json格式从包含boost::any的映射中读取和写入数据
EN

Stack Overflow用户
提问于 2018-04-27 23:35:11
回答 1查看 97关注 0票数 0

下面是地图的声明方式:std::map<const std::string,boost::any> data

我想创建一个将映射中的所有数据写入文件的函数,以及另一个读取数据并使用数据和相应的数据类型初始化映射的函数。

我读过大约10年前的一些老帖子,说这是不可能的,有什么改变了吗?

EN

回答 1

Stack Overflow用户

发布于 2018-04-28 01:00:54

如果您知道boost::any只引用了几个数据类型中的一个,那么您可以显式地检查它们,并显式地处理每种情况。例如,如果您使用Nlohmann Json库进行json序列化,则可以执行以下操作:

代码语言:javascript
复制
nlohmann::json json_rep;
for(auto const& kv: data)
{
    auto const& key = kv.first;
    auto const& value = kv.second;
    auto const& type = value.type();
    if(type == typeof(std::string))
        json_rep[key] = boost::any_cast<std::string>(value);
    else if(type == typeof(int))
        json_rep[key] = boost::any_cast<int>(value);
    else if(type == typeof(double))
        json_rep[key] = boost::any_cast<double>(value);
    else if(type == typeof(MyCustomType))
        json_rep[key] = boost::any_cast<MyCustomType>(&value)->to_json();
    // etc...
    else
        throw std::runtime_error("Invalid data type in data");
}

不幸的是,如果any的数据类型没有界限,那么就没有通用的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50065801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档