2017-01-14 1 views
0

제 응용 프로그램에서 (std :: out을 사용하는) 콘솔과 (어떤 텍스트를 보여줄 수있는 함수가있는) 창을 가지고 있습니다. 내가 찾고있는 것은 내 창에서 마지막 라인을 보여주는 방법입니다. 나는 사용자 정의 streambuf 클래스 또는 구조체를 단순히 오버로드하는 것에 대한 기사를 읽었습니다. < < 연산자.< 연산자를 오버로드 할 수 없습니다. 그렇게 할 경우 endl과 같은 것을 사용할 수 없기 때문입니다.창문에 마지막 줄을 보냅니다.

또 다른 게시물 here은 내 자신의 streambuf를 정의하는 것이 좋습니다.하지만 내 문제에 대한 좋은 해결책인지는 알 수 없습니다. 누군가이 기능을 구현하는 방법에 대한 조언을 나에게 줄 수 있습니다.

+1

정확하게, 그리고 "내 창"에 의해 "COUT의 마지막 줄에"무엇을 의미합니까? –

+0

마지막 줄은 마지막 '\ n'char 이후로 cout을 통과 한 모든 것을 의미하며 내 창은 addText (...) 함수가있는 점 구름 라이브러리의 PCLVisualizer이며 일부 텍스트를 표시 할 수 있습니다. – 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' 류의 스트림 버퍼를 사용하라. James Kanze는 한 번 그것에 대해 기사를 썼습니다. 오 그래, 그것은 OP의 연결된 그래서 질문에 연결되어 있습니다 (http://stackoverflow.com/a/528661/464581). –

관련 문제