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 的序列化?的主要内容,如果未能解决你的问题,请参考以下文章

如何验证我使用的 boost 库是不是支持 C++11?

C++11多线程

默认情况下,clang 中是不是有一组已知的 `c++11` 功能不需要`-std=c++11`?

C++11 的 std::thread 是不是与 POSIX 信号量兼容?

如何在 Mac 终端中使用 C++11 支持编译 C++

在 C++11 及更高版本中,std::string::operator[] 是不是进行边界检查?