在 Boost.Log (Boost 1.60.0) 中重载插入运算符

Overloading insertion operator in Boost.Log (Boost 1.60.0)

本文关键字:Boost 重载 运算符 插入 Log      更新时间:2023-10-16

我正在尝试重载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/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() <<值

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

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

谢谢!

看起来像一个 ADL 问题:由于 operator<<既不在 boost::log 中,也不在 std 命名空间中,因此在名称查找期间不会拾取它。