宏与<<操作者

时间:2014-08-25 18:02:23

标签: c++ visual-c++ macros

我正在使用BOOST_LOG_SEV宏来记录我的应用程序中的信息。但是现在我需要以我的空间方式捕获日志记录信息。我决定创建新的BOOST_LOG_SEV_ABC宏,将信息重定向到BOOST_LOG_SEV和我的函数aaa

#define BOOST_LOG_SEV_ABC(logger, lvl)   BOOST_LOG_SEV(logger, lvl)


void aaa(std::strstream value)
{
    std::cout<<"this is my str "<<value;
}

不幸的是,我不知道如何将流传递给宏中的aaa。如何编写宏BOOST_LOG_SEV_ABC来完成所有这些工作。

2 个答案:

答案 0 :(得分:0)

你不能 1 ,该功能被硬编码以使用std::cout。这就是格式化输出函数通常采用两个参数的原因:用于输出的流和要格式化的值。

1 您可以暂时替换cout缓冲区对象来玩弄技巧,但这会改变全局状态以解决本地问题,这绝对是一个坏主意。

答案 1 :(得分:0)

boost log宏返回一个使用运算符&lt;&lt;&lt;将数据流式传输到日志记录接收器。您可以设置自定义接收器来接受通过标准升压记录宏记录的消息,而不是在前端捕获此数据。

http://www.boost.org/doc/libs/1_56_0/libs/log/doc/html/log/tutorial/sinks.html

另一种选择是实现自己的使用运算符&lt;&lt;&lt;&lt; (某种流)并将数据发送到boost日志和你的aaa函数。