c++ - 类不能使用 boost::json 序列化自己
问题描述
我写了一个小类,它依赖于 boost::json 来序列化自己。它无法编译,因为编译器听起来无法找到实现 json::value<=>myClass 翻译的 tag_invoke() 函数:
/usr/include/boost/json/value_from.hpp:87:35: error: no matching function for call to ‘value_from_impl(CSpicaFTConfig&, std::remove_reference<boost::json::storage_ptr&>::type)’
return detail::value_from_impl(
~~~~~~~~~~~~~~~~~~~~~~~^
std::forward<T>(t), std::move(sp));
给出了这两个函数的实现:
CSpicaFTConfig CSpicaFTConfig::tag_invoke(value_to_tag<CSpicaFTConfig>, value const &jv);
void CSpicaFTConfig::tag_invoke(value_from_tag, value &jv, CSpicaFTConfig const &cfg);
但编译器似乎无法找到它们。
欢迎任何提示!谢谢
解决方案
实际上,实现 tag_invoke() 函数的正确方法是将它们定义为自由函数,对象类的朋友(这里是 CSpicaFTConfig )进行序列化:
// CSpicaFTConfig => boost::json::value
friend void tag_invoke(value_from_tag, value &jv, CSpicaFTConfig const &cfg);
// boost::json::value => CSpicaFTConfig
friend CSpicaFTConfig tag_invoke(value_to_tag<CSpicaFTConfig>, value const &jv);
谢谢你的支持。
推荐阅读
- python - 无法使用 Selenium 单击按钮 - python
- unicode - 如何在 Overleaf LaTex 中显示多字符 unicode 表情符号?
- elasticsearch - Elasticsearch查询关键字值大于X的所有文档[7.2]
- ngrx - 如何覆盖/替换 NgRx 中的 DefaultDataService 并编写自定义 API 方法
- python - 我的标准神经网络成本正在上升
- javascript - “通过网络传输”大小大于资源大小
- ios - 错误:实例成员不能用于类型 viewController
- css - 嵌入 Vimeo 播放器(或任何 iframe 视频播放器)全宽和全高
- amazon-web-services - AWS + Springboot + 微服务 + Elastic BeanStalk + API Gateway + DynamoDB
- python - 修复多记录表中的错误日期