Mam funkcję w mojej przestrzeni nazw ns
, która pomaga mi drukować pojemniki STL. Na przykład:boost :: formatowanie i niestandardowe drukowanie kontenerów standardowych
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;
}
Działa to doskonale nadaje się do drukowania z operator <<
bezpośrednio:
std::set<std::string> x = { "1", "2", "3", "4" };
std::cout << x << std::endl;
Jednak użycie boost::format
jest niemożliwe:
std::set<std::string> x = { "1", "2", "3", "4" };
boost::format("%1%") % x;
Problem jest dość oczywista: doładowania nie ma pojęcia chciałbym, aby używał mojego niestandardowego operator <<
do drukowania typów, które nie mają nic wspólnego z moją przestrzenią nazw. Poza dodaniem deklaracji using
do boost/format/feed_args.hpp
, czy istnieje wygodny sposób, aby uzyskać boost::format
poszukać mojego operator <<
?
zdecydowanie sugge st spojrzeć na [to pytanie] (http://stackoverflow.com/q/4850473/500104), ponieważ w zasadzie odpowiada na twoje potrzeby. Nie będę głosował, aby zamknąć jako duplikat, ponieważ twoje aktualne pytanie jest inne (o 'operatora <<'). – Xeo
@Xeo: Mój rzeczywisty kod wykorzystuje bardzo podobne podejście do drukowania dowolnego pojemnika. W każdym razie problem polega nie na tym, jak wydrukować kontener za pomocą 'operatora <<", jest to, jak zrobić to samo przeciążenie pracą dla rzeczy, w których Koenig nie robi tego, co chcę. –