【问题标题】:Overloading insertion operator in Boost.Log (Boost 1.60.0)在 Boost.Log (Boost 1.60.0) 中重载插入运算符
【发布时间】: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&lt;&lt; 不匹配(操作数类型为 boost::log::v2s_mt_posix::basic_formatting_ostream<char>::ostream_type {aka std::basic_ostream<char>}const std::vector&lt;int&gt;)

strm.stream()

据我了解,重载不起作用! 因为编译器仍在调用预定义的operator&lt;&lt;,这使得strm.stream() &lt;&lt; value 调用。

我做错了吗? 解决这个问题的最佳方法是什么?

谢谢!

【问题讨论】:

  • 看起来像一个 ADL 问题:operator
  • 该死!的确!只需将重载包装在 namespace boost { namespace log { ... } } 内即可解决。非常感谢@KazDragon :)
  • 回答了我的评论。

标签: c++ c++11 boost


【解决方案1】:

这看起来像是一个 ADL 问题:由于 operator

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2014-11-27
    • 2012-08-10
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多