升级Boost至1.86后boost::json value构造报错,求优化方案
问题分析与解决
错误原因
Boost 1.86版本对boost::json::value的初始化列表构造逻辑做了调整,尤其是针对容器类型的隐式转换规则:
- 在1.79版本中,编译器可以自动将
std::vector隐式转换为boost::json::array,因此初始化列表里的{ "PdfOids", obj.pdfOids }能直接构造合法的JSON键值对。 - 1.86版本中,
boost::json::value_ref的模板推导机制发生变化,不再支持这种隐式转换,导致编译器无法将std::vector直接转换为JSON值类型,触发C2440类型转换错误。
简洁解决办法
不需要单独创建临时boost::json::object,直接在初始化列表中显式将std::vector转换为boost::json::array即可,代码更紧凑:
void tag_invoke(boost::json::value_from_tag, boost::json::value& jv, AppointmentEnd const& obj) { jv = { { "MridianPatientOid", obj.mridianPatientOid }, { "PdfOids", boost::json::array(obj.pdfOids.begin(), obj.pdfOids.end()) } }; }
如果你的Boost版本支持value_from对std::vector的默认适配(Boost JSON原生支持标准容器的序列化),还可以进一步简化:
void tag_invoke(boost::json::value_from_tag, boost::json::value& jv, AppointmentEnd const& obj) { jv = { { "MridianPatientOid", obj.mridianPatientOid }, { "PdfOids", boost::json::value_from(obj.pdfOids) } }; }
内容的提问来源于stack exchange,提问作者bobeff
相关产品推荐
相关产品推荐

