date_serialization_demo.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 128 行

CPP
128
字号
#include "boost/date_time/gregorian/gregorian.hpp"#include "boost/date_time/gregorian/greg_serialize.hpp"#include "boost/serialization/set.hpp"#include "boost/serialization/list.hpp"#include "boost/archive/text_oarchive.hpp"#include "boost/archive/text_iarchive.hpp"#include <iostream>#include <fstream>using namespace boost::gregorian;typedef std::set<date> date_set;typedef std::list<date> date_list;void print(std::ostream& os, const date_set& ds) {  os << "******** Date Set *********" << std::endl;  date_set::const_iterator itr = ds.begin();  while (itr != ds.end())   {    os << (*itr) << " ";    itr++;  }  os << "\n***************************" << std::endl;}class foo { public:  foo(date d = date(not_a_date_time),       int i = 0) :    my_date(d),    my_int(i)  {}  void insert_date(date d)  {    my_dates.push_back(d);  }  void print(std::ostream& os) const  {    os << "foo= my_date is: " << my_date        << " my_int is: " << my_int;    date_list::const_iterator i = my_dates.begin();    os << " Important dates: ";    while (i != my_dates.end()) {      os << (*i) << " ";      i++;    }    os << std::endl;  } private:  friend class boost::serialization::access;   // is a type of input archive the & operator is defined similar to >>.  template<class Archive>  void serialize(Archive & ar, const unsigned int version)  {    ar & my_date;    ar & my_int;    ar & my_dates;  }  date my_date;  int my_int;  date_list my_dates;};intmain(){  try {    date d(2004, Apr, 5);    std::cout << "Date: " << to_iso_string(d) << std::endl;    std::cout << "Date: " << d << std::endl;    std::ofstream ofs("date_demo.txt");    boost::archive::text_oarchive oa(ofs);    oa << d;        std::cout << "Construct a foo" << std::endl;    foo f(d, 1);    f.insert_date(d+days(1));    f.insert_date(d+days(2));    f.insert_date(d+days(3));    f.print(std::cout);    oa << f;        date_set dates;    dates.insert(date(2004, Apr,1));    dates.insert(date(2004, Apr,10));    dates.insert(date(2004, Apr,15));    print(std::cout, dates);        oa << dates;    ofs.close();    std::cout << "Now do the input streaming" << std::endl;    date d2(not_a_date_time);    std::ifstream ifs("date_demo.txt");    boost::archive::text_iarchive ia(ifs);    ia >> d2;        std::cout << "New date is: " << d2 << std::endl;        foo f2;    ia >> f2;    f2.print(std::cout);        date_set dates2;    ia >> dates2; //exception here    print(std::cout, dates2);  }  catch(std::exception& e) {    std::cout << "Caught Exception: " << e.what() << std::endl;  }}/*  Copyright 2001-2004: CrystalClear Software, Inc *  http://www.crystalclearsoftware.com * *  Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?