私は/アンシリアライズ以下のクラスをシリアル化したい:私はboost.serializeのドキュメントを読んで、あなたがクラスを登録しなければならないことサイードBoost.serializeで派生テンプレートクラスをシリアル化する方法は?
class Feature{
...
virtual string str()=0;
};
template<typename T>
class GenericFeature : public Feature{
T value;
...
virtual string str();
};
。 コンストラクタに登録することができます。しかし、登録はダイナミックではなく、静的ではないため、読み込みに問題があります(理解したように、シリアライズ/デシリアライズの前にクラスを登録する必要があります)。
これらのクラスを保存/ロードするにはどうすればよいですか?
BOOST_SERIALIZATION_ASSUME_ABSTRACT(Feature);
シリアル化の方法は次のように多かれ少なかれになります:
template<class Archive>
void Feature::serialize(Archive & ar, const unsigned int version)
{
ar & BOOST_SERIALIZATION_NVP(some_member);
}
template<typename T,class Archive>
void GenericFeature<T>::serialize(Archive & ar, const unsigned int version)
{
ar & boost::serialization::base_object<Feature>(*this); //serialize base class
ar & BOOST_SERIALIZATION_NVP(some_other_member);
}
今、トリッキーなポイントは、クラスを登録することである
最初のコードボックスの11行目にバグがあります。私が間違っていないなら、 "boost :: serialization :: base_object"の左に "ar&"をつけてください。しかし、ニースの答え! –
@lionbest: 'boost :: serialization :: base_object(* this);の代わりに' BOOST_SERIALIZATION_BASE_OBJECT_NVP'を使うべきではありません。 –
Cookie
基本クラスが2つ以上ある場合は、名前を指定したいと思うかもしれません。私はこのマクロがここで必要とは思わないが、確かにあなたは1つ持っていたいかもしれない。 – Arpegius