gpt4 book ai didi

c++ - std::cout、ostream 和其他类型的获取输出流

转载 作者:行者123 更新时间:2023-11-30 03:38:40 26 4
gpt4 key购买 nike

在我的项目(虚幻引擎 4)中,我没有输出流 - 我可以通过 UE_LOG 函数代替它进行通信,它的工作方式与 printf() 非常相似。问题是我刚刚制作了一个 .dll 库(不包含虚幻引擎),我想通过 iostream 进行通信。我的想法是 - 在 .dll 库中,我使用标准的 cout 将消息写入 ostream,我在 Unreal Engine 函数中使用所有这些,在那里我以字符串的形式获取 ostream并将其输出到 UE_LOG 函数中。

问题是我总是将 std::cout 视为魔术的一部分,而没有考虑真正的内容(我很确定我们大多数人都这样做了)。我该如何处理?简单的方法行不通(比如获取 stringstream 并将其输出到 UE_LOG)。

最佳答案

My idea is - inside .dll library I use standard cout to write messages into ostream

您实际上可以用您自己的实现替换用于 std::cout 的输出缓冲区。使用 std::ostream::rdbuf()这样做的功能(来自引用文档的示例):

#include <iostream>
#include <sstream>

int main()
{
std::ostringstream local;
auto cout_buff = std::cout.rdbuf(); // save pointer to std::cout buffer

std::cout.rdbuf(local.rdbuf()); // substitute internal std::cout buffer with
// buffer of 'local' object

// now std::cout work with 'local' buffer
// you don't see this message
std::cout << "some message";

// go back to old buffer
std::cout.rdbuf(cout_buff);

// you will see this message
std::cout << "back to default buffer\n";

// print 'local' content
std::cout << "local content: " << local.str() << "\n";
}

关于c++ - std::cout、ostream 和其他类型的获取输出流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39434944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com