【发布时间】:2016-01-29 17:43:07
【问题描述】:
我正在尝试重载 operator<<,以便我可以在 Boost.Log 中记录 vector<T>s。我尝试重载formatting_ostream:
template <typename T>
inline boost::log::formatting_ostream &
operator<< (boost::log::formatting_ostream & o, const std::vector<T> & v) {
return o;
}
这不能用 Boost 1.60.0 编译
我正在使用以下记录器:
typedef boost::log::sources::severity_logger<
boost::log::trivial::severity_level
> my_logger_t;
我看到的错误是:
.../boost_1_60_0/build/include/boost/log/utility/formatting_ostream.hpp:799:19:
错误:
operator<<不匹配(操作数类型为boost::log::v2s_mt_posix::basic_formatting_ostream<char>::ostream_type {aka std::basic_ostream<char>}和const std::vector<int>)strm.stream()
据我了解,重载不起作用!
因为编译器仍在调用预定义的operator<<,这使得strm.stream() << value 调用。
我做错了吗? 解决这个问题的最佳方法是什么?
谢谢!
【问题讨论】:
-
看起来像一个 ADL 问题:operator
-
该死!的确!只需将重载包装在
namespace boost { namespace log { ... } }内即可解决。非常感谢@KazDragon :) -
回答了我的评论。