我正在向 iOS 应用程序添加 C++ 代码,并且我想使用 UITextView 作为一种方式来显示通过 std::cout 发生的事情。我不想过多地修改 C++ 代码。
到目前为止,我已经定义了一个名为 stdcout 的字符串流,在我对捕获输出感兴趣的 C++ 代码范围内,我正在 C++ 块返回后更新 UITextView。这有点侵入性,因为我需要进行一些手动文本替换,而且容易出错。
有一个更好的方法吗 ?
我正在向 iOS 应用程序添加 C++ 代码,并且我想使用 UITextView 作为一种方式来显示通过 std::cout 发生的事情。我不想过多地修改 C++ 代码。
到目前为止,我已经定义了一个名为 stdcout 的字符串流,在我对捕获输出感兴趣的 C++ 代码范围内,我正在 C++ 块返回后更新 UITextView。这有点侵入性,因为我需要进行一些手动文本替换,而且容易出错。
有一个更好的方法吗 ?
你可以看看 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