过载运算符<<提升日志

时间:2014-10-02 07:07:50

标签: c++ c++11 boost stl

inline std::ostream& operator<<(std::ostream& p, const std::vector<unsigned int>& vector){
  p << "[ ";
  for(auto i:vector){
    p << " "<< i << " ,";
  }
  p<< "]";
  return p;
}

#define LOG_DEBUG_MESSAGE BOOST_LOG_SEV(my_logger::get(), debug)


std::vector<unsigned int> test {1, 2, 3};
LOG_DEBUG_MESSAGE << "test "<< test;
std::cout << test  << std::endl;

您好,

我重载了我的运算符&lt;&lt;对于std :: vector。当我使用std :: cout时效果很好,但是使用boost log我会得到以下错误:

  

boost / log / utility / formatting_ostream.hpp:710:19:错误:无法绑定   &#39;的boost ::登录:: v2_mt_posix :: basic_formatting_ostream :: ostream_type   {aka std :: basic_ostream}&#39; lvalue to&#39; std :: basic_ostream&amp;&amp;&#39;        strm.stream()&lt;&lt;值;

     

/opt/gcc.4.9.1/include/c ++ / 4.9.1 / ostream:602:5:注意:初始化   参数1&#39; std :: basic_ostream&lt; _CharT,_Traits&gt;&amp;   std :: operator&lt;&lt;(std :: basic_ostream&lt; _CharT,_Traits&gt;&amp;&amp;,const _Tp&amp;)   [与_CharT = char; _Traits = std :: char_traits; _Tp =   的std ::矢量]&#39;        运算符&lt;&lt;(basic_ostream&lt; _CharT,_Traits&gt;&amp;&amp; __os,const _Tp&amp; __x)

我不知道为什么升压日志不起作用。它使用相同的&lt;&lt;运营商还是?在具有自己的类的其他示例中,它适用于重载。我不知道我错过了什么。任何人都知道如何解决这个错误?

1 个答案:

答案 0 :(得分:5)

&#39; boost :: log :: basic_formatting_ostream不是从std :: ostream派生的。

你应该重载operator&lt;&lt;对于std :: vector和重载运算符应该使用boost :: log :: formatting_ostream&amp;作为它的第一个参数。

检查下面修改后的代码示例:

inline boost::log::formatting_ostream& operator<<(boost::log::formatting_ostream& p,  std::vector<int>& vector)
{
        p << "[ ";
        for(auto i:vector){
            p << " "<< i << " ,";
        }
        p<< "]";
        return p;
}