无法从 VS2019 中的 Boost 属性树映射值中获取值()

Posted

技术标签:

【中文标题】无法从 VS2019 中的 Boost 属性树映射值中获取值()【英文标题】:Can't get_value() from Boost property tree map value in VS2019 【发布时间】:2021-05-28 16:55:11 【问题描述】:

我点击此链接提取 Boost 属性树值。

Extracting STL Map from Boost Property Tree

我没有安装库 fmt,所以只是从原始代码修改了输出函数。该代码在 g++ 中运行良好。但是在VS2019中测试时,一直弹出“标识符”未定义”的错误。

#include <boost/property_tree/ptree.hpp>
#include <map>
#include <iostream>

using boost::property_tree::ptree;

int main() 
    ptree pt;
    pt.put("keyA", "valueA-1");
    pt.put("keyB", "valueB");
    pt.put("keyC", "valueC");

    pt.add("keyA", "valueA-2"); // not replacing same key
    
    std::map<std::string, ptree> m(pt.begin(), pt.end());
    std::multimap<std::string, ptree> mm(pt.begin(), pt.end());

    std::map<std::string, std::string> dict;
    for (auto& [k,v]: pt)                            // THIS LINE HAS ERROR!
        dict.emplace(k, v.get_value<std::string>());
    

    for (auto elem : dict) 
        std::cout << elem.first << "  "  << elem.second << std::endl;
    
    return 0;

我没有看到这个指定的行有什么问题,所以我一定错过了 VS2019 中的一些开关或配置?

【问题讨论】:

【参考方案1】:

在意识到VS2019默认使用C++14后,我自己找到了答案。指定的行:“auto& [k, v] : pt”需要一些 C++17 特性。所以去项目设置 --> 配置属性 --> 常规 --> C++ 语言标准 --> 更改为 ISO C++17 标准 (/std:c++17)。

然后代码就可以正常工作了

【讨论】:

以上是关于无法从 VS2019 中的 Boost 属性树映射值中获取值()的主要内容,如果未能解决你的问题,请参考以下文章

BGL(boost graph Library)(8-)

从 json 文件构造 boost 属性树的性能很差?

vs配置PCL无法打开BOOST源文件怎么办

使用 boost 属性树遍历 json 属性键和值

通过使用 boost 属性树解析 JSON 文件来访问布尔值

Boost的属性树:删除一个知道其路径的孩子