私はSTLコンテナを印刷するのに役立つネームスペースns
の関数を持っています。たとえば、次のようにboost :: formatとカスタム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;
}
これは直接operator <<
で印刷するための素晴らしい作品:
std::set<std::string> x = { "1", "2", "3", "4" };
std::cout << x << std::endl;
はしかし、boost::format
を使用することは不可能です:
std::set<std::string> x = { "1", "2", "3", "4" };
boost::format("%1%") % x;
問題はかなり明白です:ブーストは考えていません私は自分のネームスペースとは何の関係もないタイプをプリントするために私のカスタムoperator <<
を使用したいと考えています。 boost/format/feed_args.hpp
にusing
宣言を追加する以外に、boost::format
を私のoperator <<
にするのに便利な方法はありますか?
私は強くsuggeあなたは基本的にあなたのニーズに答えるので、あなたは[この質問](http://stackoverflow.com/q/4850473/500104)を見てください。あなたの実際の質問が異なるので(私は 'operator <<'について)、私は重複して閉じるよう投票しません。 – Xeo
@ Xeo:私の実際のコードは、どんなコンテナを印刷するのにも非常に似たアプローチを使用しています。とにかく、問題は、 'operator << 'でコンテナを印刷する方法ではなく、Koenigが望んでいないものに対して同じオーバーロード作業を行う方法です。 –