From: Vladimir Prus (ghost_at_[hidden])
Date: 2003-02-04 03:22:19
Terje Slettebø wrote:
>>From: "Vladimir Prus" <ghost_at_[hidden]>
>>after having to output std::vector to stream again and again using custom
>>solution, I started to wonder why we don't have a solution in boost.
>>Does it makes sense to include operators<< for vectors, sets, etc?
>>and so on. There are basically two approaches:
>>1. Operators use fixed format: bracked list with commas between values for
>> vector, for example.
>>2. Manipulators are provided to set brackets and separators.
>>I had implemented the second approach some time ago, but it turned out
>> that was overkill. So, 1) looks better now.
> If this is done as a library, then I think it's best not to have hard-coded
> brackets and separators. One might use an xalloc() value for each type to
> output. For example something like:
You see, that's what I have implemented back in 2001. You could change
braces/separator for each stl container, and it used xalloc()/pword().
There's one problem though: I don't remember the syntax of brace
changing, just because I used it a couple of times long ago and then
stopped. Probably, the scope should be more clearly defined:
Edward Diener wrote:
> Al Stevens who writes the C++ column for "Doctor Dobbs Journal" put out a
> persistent template library for C++ containers some time back. It is
> probably on the DDJ web site, although I haven't looked there recently. You
> might want to check that out and see what he did. I will readily admit I
> have not had the need to persist container data in my daily programming but
> I can understand others having that need.
Rozental, Gennadiy wrote:
> I do not see a way how you could implement solution with better
> flexibility/conciseness ratio than copy+ostream_iterator one.
I'm not much interested in persistence (after all, I hope that Robert's
library will take care of that). Likewise, I never needed arbitrary
delimiters, etc. But while developing an algorithm for finding k shortest
paths in a graph, I need to output each path, and have no easy standard way.
One might call this output operators are mostly debugging help, but why not
have standard debugging help?
> std::cout << boost::io_format<Map>(",", "[", "]") <<
> boost::io_format<MapList>("","","\n") << list << '\n';
> This might print:
> [1, a]
> [2, b]
> [3, c]
This example should one case where manipulators are desirable:
vector< vector<int> > v;
cout << v ;
Here, each nested vector better go on a separate line. I suggest:
cout << multiline << v;
where "multiline" manipulator causes each element of the next output container
to go on separate line.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk