Например:
// Требуется реализовать ручную сериализации в потоки ввода/вывода // следующего типа. 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 ); }