2

我正在向 iOS 应用程序添加 C++ 代码,并且我想使用 UITextView 作为一种方式来显示通过 std::cout 发生的事情。我不想过多地修改 C++ 代码。

到目前为止,我已经定义了一个名为 stdcout 的字符串流,在我对捕获输出感兴趣的 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 shell 上以 exitcode '12' 退出:

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