【问题标题】:How to redirect std::cout to a UITextView?如何将 std::cout 重定向到 UITextView?
【发布时间】:2023-03-28 04:46:01
【问题描述】:

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

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

有没有更好的方法来做到这一点?

【问题讨论】:

  • 如果它全部本地化到一个文件,为什么不直接使用你要放入输出流的 char*,并将其放入一个 NSString(使用+stringWithUTF8String:)。然后根据需要拨打setText:
  • 我真的不想跟踪 std::cout 的每次使用并对其进行修改。

标签: c++ ios objective-c


【解决方案1】:

你可以看看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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 2010-10-06
  • 1970-01-01
相关资源
最近更新 更多