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

Posted

技术标签:

【中文标题】我可以告诉 Boost.MPI 哪个类版本与 Boost.Serialization 一起使用吗?【英文标题】:Can I tell Boost.MPI which class version to use with Boost.Serialization? 【发布时间】:2011-04-15 17:38:53 【问题描述】:

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

【问题讨论】:

【参考方案1】:

不可能在同一个二进制模块中序列化同一类型的两个不同版本。原因是使用的版本是使用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

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

【讨论】:

哦,我明白了。我误解了如何使用版本参数。如果我对您(和文档)的理解正确,则可以使用它来阅读该类的旧版本,但是可以保存的版本在编译时是固定的。它是否正确?无论如何,我非常喜欢你对我的问题的解决方案——它比我想象的要干净得多。感谢您的回答!

以上是关于我可以告诉 Boost.MPI 哪个类版本与 Boost.Serialization 一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何释放 boost::mpi::request?

我对 boost::mpi::request 缺少啥?测试似乎改变了状态

如何通过 Boost.MPI 发送 2d Boost.MultiArray 的子数组?

在 Boost.MPI 中使类可序列化是啥意思?

boost mpi 示例编译

如何使用 Visual Studio 2010 在 Windows 上使用 Open MPI 构建 boost::mpi 库