Tengo una función en mi espacio de nombres ns
que me ayuda a imprimir contenedores STL. Por ejemplo:boost :: formato e impresión personalizada a std containers
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;
}
Esto funciona muy bien para la impresión con operator <<
directamente:
std::set<std::string> x = { "1", "2", "3", "4" };
std::cout << x << std::endl;
Sin embargo, utilizando boost::format
es imposible:
std::set<std::string> x = { "1", "2", "3", "4" };
boost::format("%1%") % x;
El problema es bastante obvia: Boost no tiene ni idea que me gustaría usar mi operator <<
personalizado para imprimir tipos que no tienen nada que ver con mi espacio de nombres. Además de agregar una declaración using
en boost/format/feed_args.hpp
, ¿hay alguna manera conveniente de hacer que boost::format
busque mi operator <<
?
que suger fuertemente Si echa un vistazo a [esta pregunta] (http://stackoverflow.com/q/4850473/500104), ya que básicamente responde a sus necesidades. Sin embargo, no votaré para cerrar como un duplicado, ya que su pregunta real es diferente (sobre el 'operador <<'). – Xeo
@Xeo: Mi código real utiliza un enfoque muy similar para imprimir cualquier contenedor. De todos modos, el problema no es cómo imprimir un contenedor con 'operator <<', sino cómo hacer que la misma sobrecarga funcione para cosas donde Koenig no hace lo que yo quiero. –