Boost のシリアライゼーション ライブラリ(チュートリアルを参照)を理解しようとしていますが、クラスをシリアライズする非侵入的な方法が非常に気に入っています。
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
class gps_position
{
public:
int degrees;
int minutes;
float seconds;
gps_position(){};
gps_position(int d, int m, float s) :
degrees(d), minutes(m), seconds(s)
{}
};
namespace boost {
namespace serialization {
template<class Archive>
void serialize(Archive & ar, gps_position & g, const unsigned int version)
{
ar & g.degrees;
ar & g.minutes;
ar & g.seconds;
}
} // namespace serialization
} // namespace boost
このメソッドは、「gps_position」クラスをシリアル化するために使用できる関数「serialise」を提供しますが、この関数がいったんこの関数を取得すると、クラス自体がシリアル化可能(つまり、シリアル化/逆シリアル化に関してプリミティブのように機能する)かどうかはわかりません。作成された場合、またはそのために侵入的な方法を使用する必要がある場合...
つまり、たとえば「gps_position」インスタンスのベクトルを含む別のクラスがある場合、Boost は、「gps_position」パラメーターに一致する Boost::serialization 名前空間でオーバーロードされた「serialize」関数を探すことを認識します。親クラスをシリアル化しますか? それとも、クラスの「シリアル化」メソッドを明示的に探すだけですか (このインスタンスでは見つかりません)?
私はチュートリアルでこの質問に対する答えを見つけることができませんでした.
PS私は失敗がどのように見えるべきかわからないので、「ただ試してみる」ことに消極的です(Boostは単に「何か」をシリアル化しますか?)...