在我的应用程序中,我有一个控制台(使用std :: out)和一个窗口(具有显示某些文本的功能)。我正在寻找的是一种在窗口中显示cout最后一行的方法。我已经阅读了一些关于制作自定义streambuf类或仅仅重载<<<<<<<<<<运营商。我无法超载<<<<<<运算符,因为如果我这样做,我就无法使用像endl这样的东西。
另一篇帖子here建议定义我自己的streambuf,但我不知道这是否是解决我问题的好方法。也许有人可以就如何实现这个功能给我一个建议。
答案 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;
}
};