I have a function in my namespace ns
that helps me print STL containers. For example:
template <typename T>
std::ostream& operator<<(std::ostream& stream, const std::set<T>& set)
{
stream << "{";
bool first = true;
for (const T& item : set)
{
if (!first)
stream << ", ";
else
first = false;
stream << item;
}
stream << "}";
return stream;
}
This works great for printing with operator <<
directly:
std::set<std::string> x = { "1", "2", "3", "4" };
std::cout << x << std::endl;
However, using boost::format
is impossible:
std::set<std::string> x = { "1", "2", "3", "4" };
boost::format("%1%") % x;
The problem is fairly obvious: Boost has no idea that I would like it to use my custom operator <<
to print types which have nothing to do with my namespace. Outside of adding a using
declaration into boost/format/feed_args.hpp
, is there a convenient way to make boost::format
look for my operator <<
?
operator<<
). – Erboperator <<
, it is how to make that same overload work for things where Koenig does not do what I want. – Kimberlykimberlyn