Pretty-print C++ STL containers
C++TemplatesC++11Operator OverloadingPretty PrintC++ Problem Overview
I would like to have a single template that once and for all takes care of pretty-printing all STL containers via operator<<
. In pseudo code, I'm looking for something like this:
template<container C, class T, String delim = ", ", String open = "[", String close = "]">
std::ostream & operator<<(std::ostream & o, const C<T> & x)
{
o << open;
// for (typename C::const_iterator i = x.begin(); i != x.end(); i++) /* Old-school */
for (auto i = x.begin(); i != x.end(); i++)
{
if (i != x.begin()) o << delim;
o << *i;
}
o << close;
return o;
}
Now I've seen plenty of template magic here on SO that I never thought possible, so I'm wondering if anyone can suggest something that would match all containers C<T>
. Maybe something trait-ish that can figure out if something has the necessary iterator?