2017-01-14 22 views
0

В моем приложении у меня есть консоль (которая использует std :: out) и окно (которое имеет функцию для отображения некоторого текста). То, что я ищу, - это способ показать последнюю строку cout в моем окне. Я прочитал несколько статей о создании пользовательского класса streambuf или структуры, которая просто перегружает оператор < <. Я не могу перегрузить оператор < <, потому что я не могу использовать такие вещи, как endl, если я это сделаю.Отправьте последнюю строку cout в окно

Другое сообщение here предлагает определить мой собственный streambuf, но я не знаю, является ли это хорошим решением для моей проблемы. Может быть, кто-то может дать мне совет, как я должен реализовать эту функцию.

+1

Что именно вы имеете в виду под «последней строке соиЬ», а «моего окна»? –

+0

По последней строке я имею в виду все, что прошло через cout с последнего символа '\ n', а мое окно - это PCLVisualizer из библиотеки облаков точек, в которой есть функция addText (...), где я могу показать некоторый текст. – Timo

ответ

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

У меня был подобный подход, но проблема в том, что манипулятор потока не может разрешать тип char и traits в пользовательских типах, и я не хочу писать 'endl >' каждый раз. Я мог бы использовать макрос, но – Timo

+0

Скорее, используйте поток потока типа типа tee. Джеймс Канзе однажды написал статью об этом. О, да, это связано с вопросом, связанным с СО, (http://stackoverflow.com/a/528661/464581). –

 Смежные вопросы

  • Нет связанных вопросов^_^