24 Ocak 2017 Salı

serialization split_free metodu

Giriş
Kodunu değiştiremeyeceğimiz sınıfları boost isim alanına ekleyerek kullanabilir. Şöyle yaparız.
namespace boost {
  namespace serialization {
    template<class Archive>
    void serialize(Archive & ar, Point & mapPoint, const unsigned int version) {
      ar & ...;
    }
  }
}
Tek bir metod yerine save ve load isimli iki metoda bölmek istersek şöyle yaparız.
namespace boost { 
  namespace serialization {

    template <class Archive>
    inline void save(Archive &ar, Foo const &f, const unsigned int version) {
     ...
    }

    template <class Archive>
    inline void load(Archive &ar, Foo &f, const unsigned int version) {
      ...
    }

    // split non-intrusive serialization function member into separate
    // non intrusive save/load member functions
    template <class Archive>
    inline void serialize(Archive &ar, Foo &f, const unsigned int version) {
      boost::serialization::split_free (ar, f, version);
    }

  } // serialization
} // namespace boost
Eğer serialize edilecek sınıf Archive dışında başka parametreler kullanıyorsa şöyle yaparız.
namespace boost { namespace serialization {

  template <typename Ar, typename Block, typename Alloc>
  void save(Ar& ar, dynamic_bitset<Block, Alloc> const& bs, unsigned) {
    ...
  }

  template <typename Ar, typename Block, typename Alloc>
  void load(Ar& ar, dynamic_bitset<Block, Alloc>& bs, unsigned) {
    ...
  }

  template <typename Ar, typename Block, typename Alloc>
  void serialize(Ar& ar, dynamic_bitset<Block, Alloc>& bs, unsigned version) {
    split_free(ar, bs, version);
  }

} }

Hiç yorum yok:

Yorum Gönder