3

プロセス間でメッセージを交換するために Boost.MPI を使用しています。各メッセージは、Boost.Serialization を使用してシリアル化されたクラスの 1 つを運びます。また、同じシリアライゼーション コードを使用して、そのクラスをファイルに保存します。MPI 経由で送信する必要があるものは、ファイルに保存する必要があるものよりも小さい (関連するメンバーが少ない)。シリアライゼーション ライブラリでサポートされているクラスのバージョン管理を使用して、Boost.MPI にデフォルト以外のバージョンのクラスを送信するように指示するとよいと考えていましたが、そうする方法が見つからないようです。これが可能かどうか知っていますか?

4

1 に答える 1

2

同じバイナリ モジュールで同じタイプの 2 つの異なるバージョンをシリアル化することはできません。その理由は、使用されるバージョンが、BOOST_CLASS_VERSION構文を使用して指定されたコンパイル時定数であるためです (指定されていない場合、バージョン番号はデフォルトで 0 になります)。

あなたが試すことができるのは、特定のアーカイブタイプのタイプのシリアライゼーションメンバー関数の特殊化を実装することです:

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

同様に、分割ロード/保存シリアライゼーション関数を使用するときに、オーバーロードを提供できます。

于 2011-04-16T15:09:10.780 に答える