Fix Version/s: None
Team:Data Access and Database
See Andy Salnikov comment:
Fabrice, anything is possible in C++, if you can define toString() for vectors it should also be possible to define some other construct to format vector into a stream
My objection to toString() is based on couple of of observations:
most of the time in our code converting complex objects to string is done to push them to streams or to logging system (logging is also usually based of streams)
methods like toString() are usually implemented using temporary streams.
So if you write code like cout << toString(vector) or LOGF_DEBUG("vector: %1%" % toString(vector)) it is very inefficient because it creates temporary stream and temporary string(s).
To make it more efficient you have to define operator<<() which is implemented without using toString(). Then you could implement toString() based on operator<<() but I'd argue that you should avoid it. In case you really need to convert to string there semi-standard tools which already do the same for types that have operator<< defined (like boost::lexical_cast), but again most of the time you only need operator<< as you don't want to mess with strings.
If you want to know how to implement operator<< for vector (or any container) here is the sketch of what I would do (there might be simpler ways):
And after that you can do:
And this has no overhead or any temporary objects created.