2017-01-14 11 views
0

をCOUTの最後の行を送信します。私が探しているのは、私のウィンドウの中に最後の行を表示する方法です。私は、カスタムストリームバッファクラスまたは単に< <演算子をオーバーロード構造体を作るについてのいくつかの記事を読みました。私はそうする場合ENDLのようなものを使用することはできませんだから、私は< <演算子をオーバーロードすることはできません。は、私は(それはいくつかのテキストを表示する機能を有している)(STDを使用しています::アウト)コンソールとウィンドウを持つウィンドウに自分のアプリケーションで

別のポストhereは、私自身のストリームバッファを定義することをお勧めしかし、それは私の問題のために良い解決策だ場合、私は知りません。たぶん誰かが私にこの機能をどのように実装するべきかアドバイスをくれます。

+1

あなたは「COUTの最後の行」によると、「私の窓」で、正確に何を意味するのですか? –

+0

最後の行は、最後の '\ n'文字以来、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 >'と書くことを望まないということです。私は 'tee'のようなストリームバッファを使用し、むしろ – Timo

+0

かかわらず、マクロを使用することができます。 James Kanzeはかつてそれについての記事を書いた。ああ、それはOPのリンクSO質問、(http://stackoverflow.com/a/528661/464581)ににリンクされています。 –

関連する問題

 関連する問題