我的命名空间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 <<
来打印与我的命名空间无关的类型。除了在 中添加using
声明之外boost/format/feed_args.hpp
,有没有方便的方法来boost::format
查找 my operator <<
?