
Hello list, I have a set of inherited classes as follows: client [parent of] stream [parent of] parser [parent of] grammar When I perform the following call: boost::asio::async_read_until( socket_, streambuf_, stream::parse(), boost::bind( &client::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred ) ); The xml::parser::operator() call for the match condition is a copy of the classes: parser [parent of] grammar I need to know if someone could suggest a client way for me to use (shared) pointers to the classes so that the xml::parser::operator() can keep its state changes over successive calls for async_read_until. Currently I have this (hack) for the issue, but hope there is a cleaner approach: class parser : public grammar { public: parser( ) : parser_(//stupid hack... this ) { }; virtual ~parser( ) { }; parser& parse( ) { return *this; }; template <typename T> std::pair<T, bool> operator()( T begin, T end ) { ...[state changes based on content matches]... }; private: parser* parser_;//needed for stupid hack... protected: }; When I call stream::parse() it returns the parser object, at which async_read_until makes a copy of the parser object and its base classes. When parser::operator() is called by async_read_until, I then apply all state changes via parser* parser_ to the original class. Any suggestions are welcome. Etienne.