如何返回一个可选的Boost.JSON对象?
我不确定这里的std::move是否有用,但我想避免不必要的拷贝;反正没有它,代码仍然编译不过。
#include <boost/optional.hpp>
#include <boost/json.hpp>
#include <iostream>
struct Response {
int status; // Not used in this example
boost::optional<boost::json::object> json;
};
Response func() {
Response res;
boost::json::object json;
json["test"] = "func";
res.json.value() = std::move(json);
return res;
}
int main() {
Response res = func();
if (res.json)
std::cout << boost::json::serialize(res.json.value()) << std::endl;
return 1;
}
期望输出:
{"test":"func"}
运行时错误:
Terminating due to uncaught exception 0x3808fb01b000 of type boost::wrapexcept<boost::bad_optional_access>
解决方案
在这一行:
res.json.value() = std::move(json);
res.json 是一个空的 boost::optional,因此对它调用 .value() 是无效的。
在运行时错误中有一个提示,提到 "boost::bad_optional_access"。
相反,你可以直接使用:
res.json = std::move(json);
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。