You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:15:06