Ho una funzione nel mio spazio dei nomi ns
che mi aiuta a stampare i contenitori STL. Per esempio:boost :: formato e stampa personalizzata di contenitori std
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;
}
Questa grande opera per la stampa con operator <<
direttamente:
std::set<std::string> x = { "1", "2", "3", "4" };
std::cout << x << std::endl;
Tuttavia, utilizzando boost::format
è impossibile:
std::set<std::string> x = { "1", "2", "3", "4" };
boost::format("%1%") % x;
Il problema è abbastanza ovvio: Boost ha idea che mi piacerebbe che usasse la mia custom operator <<
per stampare tipi che non hanno nulla a che fare con il mio spazio dei nomi. Oltre all'aggiunta di una dichiarazione using
in boost/format/feed_args.hpp
, c'è un modo conveniente per cercare per il mio operator <<
?
sono fermamente sugge d un'occhiata a [questa domanda] (http://stackoverflow.com/q/4850473/500104), poiché fondamentalmente risponde alle tue esigenze. Non voterò per chiudere come duplicato, tuttavia, poiché la tua domanda reale è diversa (riguardo all'operatore '' '). – Xeo
@Xeo: il mio codice attuale utilizza un approccio molto simile alla stampa di qualsiasi contenitore. Ad ogni modo, il problema non è come stampare un container con 'operator <<', è come fare lo stesso sovraccarico per cose in cui Koenig non fa quello che voglio. –