捕获/重定向 cout 到函数
是否可以以某种方式捕获 cout,以便每个标准输出 (cout << "example";
) 自动调用函数 (myfunc("example");
)?
Is it possible to capture cout in a way so that every standard output (cout << "example";
) automatically calls a function (myfunc("example");
)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
一种方法是创建一个具有适当的运算符<<重载的类,并创建一个名为
cout
的全局实例,并使用std::whatever 而不是
using namespace std;
。然后,从自定义cout
到std::cout
来回切换就足够容易了。但这只是一种解决方案(可能需要大量的工作,超出您想要的花费),我相信其他人知道更好的方法。
One way would be to create a class which had the appropriate
operator<<
overloads and create a global instance calledcout
and tousing std::whatever
instead ofusing namespace std;
. It would then be easy enough to switch back and forth from your customcout
tostd::cout
.That's just one solution though (which may require a decent amount of work, more than you want to spend), I'm sure other people know better ways.
您需要做的是创建一个继承自 std::streambuf 的新类,并重载虚拟函数 virtual int Overflow(int c); 。然后,您需要在此类的
cout
上使用rdbuf()
。将其连接到
cout
后,每个字符输出都会调用overflow()
。例子:
What you need to do is make a new class inherited from
std::streambuf
and overload the virtual functionvirtual int overflow(int c);
. You then need to userdbuf()
oncout
to this class.After you connect it up to
cout
theoverflow()
will be called with every character output.Example: