如何将std :: cout重定向到UITextView?

时间:2013-03-28 08:45:58

标签: c++ ios objective-c

我正在向iOS应用程序添加C ++代码,我想使用UITextView来显示通过std :: cout的内容。我不想太多地修改C ++代码。

到目前为止,我已经在C ++代码的范围内定义了一个名为stdcout的字符串流,我对捕获输出感兴趣,并且在C ++块返回后我正在更新UITextView。这有点干扰,因为我需要做一些手动文本替换,而且容易出错。

有更好的方法吗?

1 个答案:

答案 0 :(得分: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