gpt4 book ai didi

c++ - 向 ostream 输出添加前缀

转载 作者:搜寻专家 更新时间:2023-10-31 01:20:43 24 4
gpt4 key购买 nike

我正在寻找一种向 ostream 添加前缀的方法,将其传递给其他函数,以便它们的输出带有前缀,然后将其删除以继续。

检查以下伪代码:

...
void function(ostream &out){
out << "output 1\n";
out << "output 2\n";
}

cout << "Whatever\n";
add_suffix(cout,"function: ");
function(cout);
remove_suffix(cout);
...

输出如下:

...
Whatever
function: output 1
function: output 2
...

查看 ostream 的文档,他们说哨兵可能用于前缀/后缀,但如果预期用途是我想要的,我不知道该怎么做。

ostream::sentry 文档说:

sentry: Perform exception safe prefix/suffix operations

最佳答案

一般的方法是这样的:定义 YourStreamBuffer 这是一个 streambuf ,它在写入的任何换行符之后插入你的前缀,并将输出发送到目的地缓冲。然后像这样使用它:

streambuf *oldBuf = cout.rdbuf();

YourStreamBuffer yourBuf(oldBuf, "function: ");
// everything written to yourBuf is sent to oldBuf

cout.rdbuf(&yourBuf);
function(cout);
cout.rdbuf(oldBuf);

您可以在网上找到大量关于如何实现流缓冲区的示例。还要确保您的代码是异常安全的,即即使抛出异常也会恢复 oldBuf。

注意:哨兵是不同的东西,它不是你在这里需要的。

关于c++ - 向 ostream 输出添加前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4480163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com