我在我的命名空间ns
中有一个函数,可以帮助我打印STL容器。例如:
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;
问题非常明显:Boost不知道我希望它使用我的自定义operator <<
来打印与我的命名空间无关的类型。除了在boost/format/feed_args.hpp
中添加using
声明之外,是否有一种方便的方法让boost::format
查找我的operator <<
?
operator<<
的,但我不会投票将其关闭为重复问题。 - Xeooperator <<
打印容器,而是如何使得同一重载对于Koenig无法满足要求的事情也能起作用。 - Travis Gockel