c++ - 我可以告诉 Boost.MPI 哪个类版本与 Boost.Serialization 一起使用吗?

标签 c++ boost boost-serialization boost-mpi

我正在使用 Boost.MPI 在进程之间交换消息。每条消息都带有我的一个类,使用 Boost.Serialization 序列化。我还使用相同的序列化代码将该类保存到一个文件中。我需要通过 MPI 发送的内容小于我需要保存到文件中的内容(相关成员较少)。我在想使用序列化库支持的类版本控制来告诉 Boost.MPI 发送类的非默认版本会很好,但我似乎找不到这样做的方法。你知道这是否可能吗?

最佳答案

不可能在同一个二进制模块中序列化同一类型的两个不同版本。原因是所使用的版本是使用 BOOST_CLASS_VERSION 构造指定的编译时常量(如果未指定,版本号默认为零)。

您可以尝试针对特定归档类型为您的类型实现序列化成员函数的特化:

// generic overload, used for everything except the MPI archives
template <class Archive>
void serialize(Archive & ar, const unsigned int version)
{
    // do 'normal' (file-based) serialization
}

// overload for MPI archive used while deserialization
void serialize(boost::mpi::packed_iarchive& ar, const unsigned int version)
{
    // do MPI deserialization
}

// overload for MPI archive used while serialization
void serialize(boost::mpi::packed_oarchive& ar, const unsigned int version)
{
    // do MPI serialization
}

同样,您可以在使用拆分加载/保存序列化函数时提供重载。

关于c++ - 我可以告诉 Boost.MPI 哪个类版本与 Boost.Serialization 一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5680386/

相关文章:

c++ - Boost::Serialization 和 MFC Doc/View 架构

c++ - MSVCR120D.dll OpenCV 的问题

c++ - 对于 C++ 中的日期/时间库,是否有 Boost 的轻量级替代方案?

c++ - 在 3 个字符串 vector 中查找连接

C++ 从模板参数创建元组 vector

c++ - boost::bind 成员函数 - 部分应用程序链接

c++ - 具有 boost::shared_ptr 类型成员的 std::map 序列化失败

c++ - 在没有默认构造函数的情况下序列化指向类的指针时无法覆盖 save_construct_data

c++ - libusb:在Linux上的C++中,错误[op_open] getcap失败

c++ - 在里面。静态成员,而 COPY CTOR 是私有(private)的