C++ 这个boost ptree块可以更短(更智能)吗?
我正在利用boostptree库创建一个JSON字符串,但我发现只需执行以下操作就很乏味了。我需要向metrics ptree添加一个简单的数组,如metric.name:[a,B]。我能做得更好吗?或者至少用更干净的方式写 pt::ptree公制_平均值; 公制平均投入,9999; pt::ptree公制标准; 公制标准输出,0; pt::ptree公制分布; 度量分布向后推{,度量平均值}; 度量分布推回{,度量标准}; metrics.add\u childmetric.name,metric\u distr;C++ 这个boost ptree块可以更短(更智能)吗?,c++,boost,ptree,C++,Boost,Ptree,我正在利用boostptree库创建一个JSON字符串,但我发现只需执行以下操作就很乏味了。我需要向metrics ptree添加一个简单的数组,如metric.name:[a,B]。我能做得更好吗?或者至少用更干净的方式写 pt::ptree公制_平均值; 公制平均投入,9999; pt::ptree公制标准; 公制标准输出,0; pt::ptree公制分布; 度量分布向后推{,度量平均值}; 度量分布推回{,度量标准}; metrics.add\u childmetric.name,metr
我会写一些辅助函数
template<typename T>
pt::ptree scalar(const T & value)
{
pt::ptree tree;
tree.put("", value);
return tree;
}
template<typename T>
pt::ptree array(std::initialiser_list<T> container)
{
pt::ptree tree;
for (auto & v : container)
{
tree.push_back(scalar(v));
}
return tree;
}
我会写一些辅助函数
template<typename T>
pt::ptree scalar(const T & value)
{
pt::ptree tree;
tree.put("", value);
return tree;
}
template<typename T>
pt::ptree array(std::initialiser_list<T> container)
{
pt::ptree tree;
for (auto & v : container)
{
tree.push_back(scalar(v));
}
return tree;
}
我想:
或
甚至
所有这些都是印刷品
{
"metric name": [
"9999",
"0"
]
}
另见我想:
或
甚至
所有这些都是印刷品
{
"metric name": [
"9999",
"0"
]
}
另请参见您最好使用json库,ptree很方便,但是如果您想要特定的json输出,您会遇到限制您对此有什么建议吗?我在这个项目中大量使用ptree,json格式只出现了2/3次,所以我宁愿坚持使用ptree,只要我能做我需要做的事情。非常容易使用,并提供了一些很好的语法。您最好使用json库,ptree很方便,但是如果您想要特定的json输出,您会遇到一些限制。您对此有什么建议吗?我在这个项目中大量使用ptree,json格式只出现了2/3次,所以我宁愿坚持使用ptree,只要我能做我需要做的事情。它非常容易使用,并提供了一些很好的语法是的,这可能是我坚持使用ptree的最好的方法。谢谢。是的,这可能是我和ptree一起拍的最好的一张照片。谢谢。我发现@Caleth answer更为通用和灵活,我最终编写了自己的模板函数,但你的模板函数直接达到了我最初寻找的目的,所以无论如何,谢谢。哦,是的,我之前对@Caleth的答案加了1分。很好!我发现@Caleth answer更为通用和灵活,我最终编写了自己的模板函数,但你的模板函数直接达到了我最初寻找的目的,所以无论如何,谢谢你。哦,是的,我以前曾+1'ed@Caleth的答案。很好!
for (auto el : {9999, 0})
arr.push_back({"", ptree(std::to_string(el))});
{
"metric name": [
"9999",
"0"
]
}