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

时间:2011-04-15 17:38:54

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

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

1 个答案:

答案 0 :(得分:2)

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

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