将cout的最后一行发送到窗口

时间:2017-01-14 17:22:29

标签: c++ cout io-redirection ostream streambuf

在我的应用程序中,我有一个控制台(使用std :: out)和一个窗口(具有显示某些文本的功能)。我正在寻找的是一种在窗口中显示cout最后一行的方法。我已经阅读了一些关于制作自定义streambuf类或仅仅重载<<<<<<<<<<运营商。我无法超载<<<<<<运算符,因为如果我这样做,我就无法使用像endl这样的东西。

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

1 个答案:

答案 0 :(得分:1)

可以重载<<以实现此目的。要使其适用于流操纵器,您可以使用内部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;
    }
};