boost 是不是支持 c++11 的 std::tuple 的序列化?
Posted
技术标签:
【中文标题】boost 是不是支持 c++11 的 std::tuple 的序列化?【英文标题】:Does boost support serialization of c++11's std::tuple?boost 是否支持 c++11 的 std::tuple 的序列化? 【发布时间】:2013-01-22 13:12:33 【问题描述】:boost 是否支持 c++11 的 std::tuple 序列化?
我在 /boost/serialization/ 中找不到 tuple.hpp 头文件
我正在使用 boost 1.52.0(如果需要,很乐意升级,但似乎 changes in version 1.53 与此无关)。
【问题讨论】:
【参考方案1】:使用C++17's fold expressions,您可以轻松实现序列化器:
template <typename Archive, typename... Types>
void boost::serialization::serialize(Archive &ar, std::tuple<Types...> &t, const unsigned int)
std::apply([&](auto &...element)
((ar & element), ...); ,
t);
基于this answer。
【讨论】:
【参考方案2】:这是另一个实现:
https://github.com/galaxyeye/atlas/blob/master/atlas/serialization/tuple.h
带有测试代码:
https://github.com/galaxyeye/atlas/blob/master/libs/serialization/test/tuple.cpp
享受:)
【讨论】:
【参考方案3】:开箱即用,不。您必须自己编写序列化程序。幸运的是,有人已经这样做了:
C++0x tuple boost serialization(也在github中)
【讨论】:
是否有不使用可变参数模板的解决方案? 5年多过去了,有官方解决办法吗?以上是关于boost 是不是支持 c++11 的 std::tuple 的序列化?的主要内容,如果未能解决你的问题,请参考以下文章
std::bind 是不是应该与 boost::asio 兼容?
在 C++11 中对 boost::asio 套接字对象重复 std::move