7

所以我想将 Boost.Log 用于我的所有日​​志记录目的。我目前编写了一个类,其中包含实例化和设置辅助方法所需的所有操作。

问题是我想重载 << 运算符以 cout 方式使用它。我希望能够使用它来拥有不同的参数类型似乎是最大的问题。

这是我尝试过的:

template <typename T>
void trace::operator <<(T data)
{
    std::string text=boost::lexical_cast<std::string>(data);
    std::cout<<data<<std::endl;
    BOOST_LOG_TRIVIAL(debug) << text;
}

但是,我知道这在逻辑上有点缺陷。为了能够将多个参数传递给 << 它需要是递归的。但是我有点困惑如何使用 boost log 来做到这一点。

我是否必须使用自定义接收器而不是方便的 boost 宏来定义日志系统?如果是这样,这是否支持 std::ostream 返回?我猜这将是返回值和流中的输入值。

4

1 回答 1

5

如果我正确理解您的问题,您需要使用 << 运算符记录有关您的对象的信息。Boost Log 使用与 ostream 兼容的运算符,因此您只需为您的类定义 << 运算符:

class your_class_t{
public:
  std::string m_data;
  int m_value;

  friend std::ostream& operator<< (std::ostream& oss, your_class_t const & val) {
    oss<<val.m_data << ": " << val.m_value;   
    return oss;
  }
}

然后你可以在 ostream 中推送你的课程:

your_class_t mytest;
mytest.m_data = "hi";
mytest.m_value = 123;
BOOST_LOG_TRIVIAL(debug) << mytest;

你会得到hi: 123

于 2013-11-09T10:11:53.813 回答