我正在尝试使用boost :: log库输出boost :: asio :: streambuf对象的内容。我通过以下方式定义了operator ostream& operator<<(ostream& ostr, const boost::asio::streambuf& buffer){ for (size_t i = 0; i < buffer.size(); ++i) { ostr << hex << (int) buffer_cast<const char*>(buffer.data())[i] << " "; } return ostr;}但是在尝试输出缓冲区的内容之后: BOOST_LOG_TRIVIAL(trace) << buffer;我有以下错误:  在包含的文件中  /home/bobeff/work/asio_netcomm_poc/third_party/lib/boost/boost/log/sources/record_ostream.hpp:31:0,                   来自/home/bobeff/work/asio_netcomm_poc/third_party/lib/boost/boost/log/trivial.hpp:23,                   从/home/bobeff/work/asio_netcomm_poc/server/src/server.cpp:14:  /home/bobeff/work/asio_netcomm_poc/third_party/lib/boost/boost/log/utility/formatting_ostream.hpp:  在'typename的实例化  boost :: log :: v2_mt_posix :: aux :: enable_if_formatting_ostream :: type boost :: log :: v2_mt_posix :: operator   boost :: log :: v2_mt_posix :: basic_formatting_ostream; T =  boost :: asio :: basic_streambuf ;类型名  boost :: log :: v2_mt_posix :: aux :: enable_if_formatting_ostream :: type =  boost :: log :: v2_mt_posix :: basic_formatting_ostream&]':  /home/bobeff/work/asio_netcomm_poc/third_party/lib/boost/boost/log/sources/record_ostream.hpp:212:51:  必须来自'typename  boost :: log :: v2_mt_posix :: aux :: enable_if_record_ostream :: type boost :: log :: v2_mt_posix :: operator   = boost :: asio :: basic_streambuf ;类型名称boost :: log :: v2_mt_posix :: aux :: enable_if_record_ostream :: type =  boost :: log :: v2_mt_posix :: basic_record_ostream&]'  /home/bobeff/work/asio_netcomm_poc/server/src/server.cpp:88:47:  从这里需要  /home/bobeff/work/asio_netcomm_poc/third_party/lib/boost/boost/log/utility/formatting_ostream.hpp:840:19:  错误:无法绑定  'boost :: log :: v2_mt_posix :: basic_formatting_ostream :: ostream_type  {aka std :: basic_ostream}'左值为'std :: basic_ostream &&'       strm.stream()                     ^在/usr/include/c++/4.8/iostream:39:0包含的文件中,                   从/home/bobeff/work/asio_netcomm_poc/server/src/server.cpp:1:  /usr/include/c++/4.8/ostream:602:5:错误:初始化参数1  'std :: basic_ostream &  std :: operator &&,const _Tp&)  [with _CharT = char; _Traits = std :: char_traits; _Tp =  boost :: asio :: basic_streambuf ]'       运算符 && __os,const _Tp&__x)       ^输出缓冲区内容的正确方法是什么? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 ADL找不到您的operator<<。请参见this答案的第一部分。 (adsbygoogle = window.adsbygoogle || []).push({});
10-08 08:00
查看更多