boost :: format i niestandardowe drukowanie standardowych kontenerów
Mam funkcję w mojej przestrzeni nazwns
to pomaga mi drukować pojemniki STL. Na przykład:
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;
}
To działa doskonale do drukowania zoperator <<
bezpośrednio:
std::set<std::string> x = { "1", "2", "3", "4" };
std::cout << x << std::endl;
Jednak używającboost::format
jest niemożliwe:
std::set<std::string> x = { "1", "2", "3", "4" };
boost::format("%1%") % x;
Problem jest dość oczywisty: Boost nie ma pojęcia, że chciałbym, aby używał mojego zwyczajuoperator <<
drukować typy, które nie mają nic wspólnego z moją przestrzenią nazw. Poza dodaniem ausing
deklaracja wboost/format/feed_args.hpp
, czy istnieje wygodny sposób wykonaniaboost::format
poszukaj mojegooperator <<
?