2

iOS アプリケーションに C++ コードを追加しています。std::cout を通過する内容を表示する方法として UITextView を使用したいと考えています。C++ コードをあまり変更したくありません。

これまでのところ、stdout という名前の文字列ストリームを C++ コードのスコープで定義し、出力をキャプチャすることに関心があり、C++ ブロックが戻った後に UITextView を更新しています。手動でテキストを置換する必要があり、エラーが発生しやすいため、これは少し面倒です。

これを行うより良い方法はありますか?

4

1 に答える 1

3

rdbuf() を見ることができます。

パフォーマンス/柔軟性が気になる場合は、カスタム ストリーム バッファーを記述し、オーバーフロー メンバーを実装して、「自動」「ライブ」更新を取得できます。

文字列ストリームにリレーする簡単な例を次に示します。

#include <sstream>
#include <iostream>

int main()
{
    std::ostringstream oss;
    auto saved = std::cout.rdbuf(oss.rdbuf());

    std::cout << "hello world" << std::endl;

    std::cout.rdbuf(saved);
    return oss.str().length();
}

このプログラムは、私の cygwin シェルで終了コード '12' で終了します。

./test.exe; echo $?
12
于 2013-03-28T09:29:05.330 に答える