C++ 将最后一行cout发送到窗口
在我的应用程序中,我有一个使用std::out的控制台和一个具有显示某些文本功能的窗口。我要找的是在我的窗口中显示最后一行cout的方法。我读过一些关于创建自定义streambuf类或结构的文章,这些类或结构只会重载您可以重载cout的最后一行到底是什么意思,我的窗口?我的最后一行是指从最后一个“\n”字符开始经过的所有内容,我的窗口是点云库中的PCLVisualizer,它有一个函数addText。。。在这里我可以显示一些文本。我在这方面也有类似的方法,但问题是流操纵器不能解析自定义类型中的char和traits类型,我不想每次都写endl。我可以使用宏,而不是像tee一样使用流缓冲区。詹姆斯·坎兹曾经写过一篇关于它的文章。哦,是的,在OP的链接问题中有链接。C++ 将最后一行cout发送到窗口,c++,cout,io-redirection,ostream,streambuf,C++,Cout,Io Redirection,Ostream,Streambuf,在我的应用程序中,我有一个使用std::out的控制台和一个具有显示某些文本功能的窗口。我要找的是在我的窗口中显示最后一行cout的方法。我读过一些关于创建自定义streambuf类或结构的文章,这些类或结构只会重载您可以重载cout的最后一行到底是什么意思,我的窗口?我的最后一行是指从最后一个“\n”字符开始经过的所有内容,我的窗口是点云库中的PCLVisualizer,它有一个函数addText。。。在这里我可以显示一些文本。我在这方面也有类似的方法,但问题是流操纵器不能解析自定义类型中的c
class out
{
std::ostringstream ss;
std::string display_str;
public:
template <typename T> out &operator<<(T &&obj)
{
std::cout << obj;
ss.str("");
ss << obj;
std::string tmp = ss.str();
if (tmp.size() == 0)
return *this;
const char *ptr = &tmp[0], *start = ptr;
while (*ptr)
{
if (*ptr == '\n')
start = ptr+1;
ptr++;
}
if (start != ptr)
display_str = start;
else
display_str += start;
update_display_string(display_str); // Replace this with your update function.
return *this;
}
};