将 cout 的最后一行发送到 window

Send the last line of cout to a window

在我的应用程序中,我有一个控制台(使用 std::out)和一个 window(具有显示一些文本的功能)。我正在寻找的是一种在我的 window 中显示最后一行 cout 的方法。我读过一些关于制作自定义 streambuf class 或只是重载 << 运算符的结构的文章。我不能重载 << 运算符,因为如果这样做,我将无法使用 endl 之类的东西。

另一个 post here 建议定义我自己的 streambuf,但我不知道这是否是解决我的问题的好方法。也许有人可以就如何实现此功能给我建议。

可以 超载 << 为此目的。要使其与流操纵器一起使用,您可以使用内部 std::stringstream:

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;
    }
};