26 Mayıs 2017 Cuma

serialization text_oarchive Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/archive/text_oarchive.hpp>
boost serialization kendi "pluggable archive format" yapımızı kullanabilmye imkan tanır. Boost serialization dışında C++11 ile çalışan Cereal serialization kütüphanesi de iyi

Constructor - std::cout
Şöyle yaparız.
boost::archive::text_oarchive ar (std::cout);
Constructor - std::ofstream
Şöyle yaparız.
std::ofstream osf ("test.txt", std::ios::binary);
boost::archive::text_oarchive ar (ofs);
Dosyanın otomatik kapanması için blok içinde kullanmak gerekebilir. Şöyle yaparız.
{
  Foo foo;
  ...
  std::ofstream ofs("foo.txt");
  boost::archive::text_oarchive ar (ofs);
   ar << foo;
}
Constructor - std::ostringstream
Şöyle  yaparız.
std::ostringstream os;
boost::archive::text_oarchive ar (os);
Constructor - boost::asio::ip::tcp::iostream
Şöyle yaparız.
boost::asio::ip::tcp::iostream stream("127.0.0.1", "3000");

boost::archive::text_oarchive archive(stream);
...

stream.close();
operator << metodu
Örnek
Elimizde bir sınıf olsun. Şöyle  yaparız.
MyClass obj;
obj.a = "hello";
obj.b = "world";
ar & msg;
Örnek
Elimizde bir variant olsun. Şöyle yaparız.
using V = boost::variant<std::string, double, int>;

ar << std::vector<V> { 3.14, "std::string", 42 };
Çıktı olarak şunu alırız.
22 serialization::archive 14 0 0 3 0 0 0 1 3.14000000000000012e+00 0 
11 std::string 2 42
Örnek
Şöyle yaparız.
oa << boost::serialization::make_nvp("foo",foo);
Örnek
İki veya daha fazla kez << metodunu çağırabiliriz. Şöyle yaparız.
boost::archive::text_oarchive oa (ofs);
// write class instance to archive
oa << g <<g1;
register_type metodu
Şöyle yaparız.
oa.register_type<Foo>();
Sanırım aynı şeyi şöyle de yapabiliyoruz.
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &ar, const unsigned int version)
{
  ar.template register_type<Foo>();
  ...
}

Hiç yorum yok:

Yorum Gönder