【发布时间】:2013-01-27 01:56:24
【问题描述】:
我有一个 c++ 库,它提供了一个具有复杂逻辑的对象。到目前为止,许多对象在执行一个库命令时将其输出打印到std::cout。我想为此创建一个 Qt GUI(在文本小部件中输出它而不是控制台输出),因此必须更改 std::cout 以获得更灵活的东西。我已将std::stringstream 参数的引用传递给主对象(并将其传递给较低的对象)并将所有“std::cout
它不起作用,因为我丢失了大部分输出。当我想从字符串流中获取它时,它非常小(只有几个字符)。如果我这样做stream << var1 << var2 << var3,似乎只有 var3 可用。
不知道如何解决这个问题。如果我将 std::cout 的引用作为主要对象参数传递,那么在控制台下一切都会好起来的,但它不适用于 GUI 应用程序(我想我无法从 std::cout 获取输出)。
请告诉我我是否以错误的方式使用流字符串。或者让我知道是否有更好的方法来获取输出(使用其他东西而不是 stringstream)。非常感谢。
【问题讨论】:
-
在某个时间点仔细查看本地范围的流(例如具有 同名作为传递参数的本地
ostrstream)是否隐藏了参数并吃掉(并在范围退出时丢弃)所有插入。从它的声音来看,它在传递链中相当早。 -
应该没问题,请参阅ideone.com/ZSCsSc - 但是,至于记录事件和其他内容,我更喜欢并发(如果不需要,也可以是非并发)队列。
-
@cooky451 发布的 ideone sn-p 中的参数是
std::stringstream&引用的任何原因?为什么不只是一个通用的std::ostream&,从而支持文件、控制台等? -
如果你决定走更简单的路线,你可以保持现有代码不变,并使用
popen(或_popen)生成它并捕获它写入stdout的内容,然后显示你认为合适的。 -
如果没有复制案例,我们无法为您提供帮助!请完整阅读Short, Self Contained, Correct (Compilable), Example 将整个项目复制到一个新目录并继续删除项目文件,直到可以在一页代码中演示此特定问题。您可能会在此过程中自己发现问题...
标签: c++ output stringstream