Re: сериализация boost::posix_time::ptime
От: zaufi Земля  
Дата: 28.01.13 14:38
Оценка:
Здравствуйте, RikkiTikkiTavi, Вы писали:

RTT>Всем привет!


RTT>В качестве класса для описания времени я выбрал boost::posix_time::ptime (дабы продолжить приобщаться к boost).


RTT>Самое простое, видимо, было бы получить внутренее представление ( в виде int64, если я правиль понял ) и сериализовать по его типу. Но не смог найти метод доступа...


почему-то там int32 к сожалению...

RTT>Теперь мне нужно сериализовать его в файл, [bпричем своим сериализатором.[/b]

RTT>Как это сделать?
RTT>Либо, писать какой-то свой сериализатор? как?
что-то я недопонимаю -- у тебя же своя сериализация... вот и делай сам

я делал так:
namespace details {
/// \todo Why \c sec_type is a 32bit size?
struct ptime_saver
{
  template <typename Buffer>
  static void invoke(Buffer& ob, const boost::posix_time::ptime& t)
  {
    const boost::posix_time::time_duration::sec_type stamp = (t - TIME_T_EPOCH).total_seconds();
    ob << stamp;
  }
};
/// \todo Why \c sec_type is a 32bit size?
struct ptime_loader
{
  template <typename Buffer>
  static void invoke(Buffer& ib, boost::posix_time::ptime& t)
  {
    boost::posix_time::time_duration::sec_type stamp;
    ib >> stamp;
    t = boost::posix_time::from_time_t(stamp);
  }
};

}                                                           // namespace details

/**
 * \brief Serialize overload to deal w/ \c boost::posix_time::ptime
 */
template <typename Buffer>
void serialize(Buffer& b, boost::posix_time::ptime& t, const int)
{
  boost::mpl::eval_if<
      typename Buffer::is_load
    , boost::mpl::identity<details::ptime_loader>
    , boost::mpl::identity<details::ptime_saver>
    >::type::template invoke(b, t);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.