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

发布于 2024-11-02 03:45:54 字数 202 浏览 6 评论 0原文

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

I'm using Boost.MPI to exchange messages between processes. Each message carries one of my classes, serialized using Boost.Serialization. I also use the same serialization code to save that class to a file. What I need to send over MPI is smaller than what I need to save to a file (fewer relevant members). I was thinking that it would be nice to use the class versioning, supported by the Serialization library, to tell Boost.MPI to send the non-default version of the class, but I can't seem to find a way to do so. Do you know if this is possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

昨迟人 2024-11-09 03:45:54

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

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

It is not possible to serialize two different versions of the same type in the same binary module. The reason is that the version used is a compile time constant specified using the BOOST_CLASS_VERSION construct (the version number defaults to zero if not specified).

What you could try is to implement specializations of the serialization member function for your type for specific archive types:

// 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
}

Similarily, you could provide overloads when using the split load/save serialization functions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文