在Boost.Log中重载插入操作符(Boost 1.60.0)

时间:2016-01-28 12:31:37

标签: c++ c++11 boost

我正在尝试重载operator<<,以便我可以在Boost.Log中记录vector<T>。我尝试重载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 /建造/包括/升压/日志/效用/ 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()&lt;&lt;值

据我所知,重载不起作用!! 因为编译器仍在调用预定义的operator<<进行strm.stream() << value调用。

我做错了吗? 什么是最好的方法呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

这看起来像ADL问题:因为运算符&lt;&lt;既不是boost :: log也不是std名称空间,它在名称查找过程中不会被选中。