Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将最后一行cout发送到窗口_C++_Cout_Io Redirection_Ostream_Streambuf - Fatal编程技术网

C++ 将最后一行cout发送到窗口

C++ 将最后一行cout发送到窗口,c++,cout,io-redirection,ostream,streambuf,C++,Cout,Io Redirection,Ostream,Streambuf,在我的应用程序中,我有一个使用std::out的控制台和一个具有显示某些文本功能的窗口。我要找的是在我的窗口中显示最后一行cout的方法。我读过一些关于创建自定义streambuf类或结构的文章,这些类或结构只会重载您可以重载cout的最后一行到底是什么意思,我的窗口?我的最后一行是指从最后一个“\n”字符开始经过的所有内容,我的窗口是点云库中的PCLVisualizer,它有一个函数addText。。。在这里我可以显示一些文本。我在这方面也有类似的方法,但问题是流操纵器不能解析自定义类型中的c

在我的应用程序中,我有一个使用std::out的控制台和一个具有显示某些文本功能的窗口。我要找的是在我的窗口中显示最后一行cout的方法。我读过一些关于创建自定义streambuf类或结构的文章,这些类或结构只会重载您可以重载cout的最后一行到底是什么意思,我的窗口?我的最后一行是指从最后一个“\n”字符开始经过的所有内容,我的窗口是点云库中的PCLVisualizer,它有一个函数addText。。。在这里我可以显示一些文本。我在这方面也有类似的方法,但问题是流操纵器不能解析自定义类型中的char和traits类型,我不想每次都写endl。我可以使用宏,而不是像tee一样使用流缓冲区。詹姆斯·坎兹曾经写过一篇关于它的文章。哦,是的,在OP的链接问题中有链接。
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;
    }
};