oess_1.4.0. Шаблоны ручной сериализации для STL контейнеров

Заметки:
Подробнее о ручной (custom) сериализации пользовательских типов см. oess_1.4.0. Ручная сериализация пользовательских типов.
Ручная сериализация пользовательских типов в потоки oess_1::io удобна для сериализации одиночных объектов пользовательских типов. Если же в поток oess_1::io требуется поместить STL-контейнер с пользовательскими типами, то можно воспользоваться шаблонами для STL-контейнеров, определенных в заголовочных файлах:

Например:

// Требуется реализовать ручную сериализации в потоки ввода/вывода
// следующего типа.
class my_type_t
  {
  private :
    std::list< std::string > m_names;
    std::vector< int > m_indexes;
    std::multimap< std::string, std::string > m_user_roles;
    ...

  public :
    ...
    oess_1::io::istream_t &
    read( oess_1::io::istream_t & s )
      {
        // Самая тривиальная реализация, без заботы об исключениях.
        return ( s >> m_names >> m_indexes >> m_user_roles );
      }

    oess_1::io::ostream_t &
    write( oess_1::io::ostream_t & o ) const
      {
        return ( o << m_names << m_indexes << m_user_roles );
      }
  };

inline oess_1::io::istream_t &
operator>>( oess_1::io::istream_t & s, my_type_t & o )
  {
    return o.read( s );
  }

inline oess_1::io::ostream_t &
operator<<( oess_1::io::ostream_t & s, const my_type_t & o )
  {
    return o.write( s );
  }

Заметки:
Шаблоны для сериализации STL-контейнеров сохраняют перед содержимым контейнера его размерность. Для хранения размерности используется тип oess_1::defs::quantity_t.
Внимание:
Механизмы ручной сериализации не являются заменой штатной сериализации ObjESSty oess_1::stdsn. Ручная сериализация предназначена для случаев, когда тип нельзя сделать сериализуемым с помошью штатных механизмов. Например, если тип входит в какую-то стороннюю библиотеку (вроде Qt, wxWidgets, ACE и др.).

Документация по ObjESSty. Последние изменения: Fri Oct 13 18:35:37 2006. Создано системой  doxygen 1.4.7
Hosted by uCoz