【问题标题】:Is it possible to execute a function every time a std::cout is used?每次使用 std::cout 时是否可以执行一个函数?
【发布时间】:2019-11-21 09:47:23
【问题描述】:

每次,std::cout 从主函数或其他函数中使用,我想将日志文件的内容复制到 Fltk GUI 窗口。

我已经实现了一个复制部分的功能。我想知道是否可以让这个函数在每次std::cout 或者std::endl 在代码中执行时都运行。

我该如何实现呢?

编辑: 如需更多说明,

每次需要运行的函数是:

void printProgress(const std::string& strProgress)
{
    std::ostringstream strResultTextStream;
    strResultTextStream << m_pLogOutput->value();
    strResultTextStream << strProgress;
    m_pLogOutput->value(strResultTextStream.str().c_str());
}

将数据添加到输出窗口(fl_multiline_output)需要上面的 4 行代码。现在我已将标准输出消息重定向到日志文件。我想每次都运行这个函数将日志文件的内容复制到 m_pLogOutput(输出窗口)

【问题讨论】:

  • 重定向/复制std::cout的“flux”和有一个观察者之间是有区别的。
  • 包装器怎么样?
  • 也许你可以使用自己的函数,它会完成复制部分,然后使用std::cout
  • 如果我想从程序内部重定向 cout 输出,我会使用 rdbuf 将 cout streambuf 设置为我想要的 streambuf。
  • @Loki - 量身定制的streambuf 可以做到这一点。

标签: c++


【解决方案1】:

我认为您可以使用#define 来发挥自己的优势:

#define cout f(parameter),cout

f() 是你的函数。如果您愿意,请将 cout 更改为 std::cout,我认为这不会引发错误。

【讨论】:

  • 这将扩展为例如 f(),cout &lt;&lt; "foo" ,即它将调用 f() 而不带参数。这应该有什么帮助?用宏替换cout 也很麻烦。 “我认为这不会引发错误。”我认为是的
  • 我加了一个参数,你现在开心吗?他唯一真正的选择是将cout 替换为宏或使用Ctrl+Rcout 替换为f(parameter),cout。他要求函数每次在使用cout 时运行,所以宏对我来说看起来不错。
  • 考虑当我声明一个函数void foo(std::ostream&amp; x = cout);时会发生什么@
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 2012-02-10
  • 2021-08-06
  • 2020-03-18
相关资源
最近更新 更多