繁体   English   中英

从 C++ 中的函数返回数据的替代方法

[英]Alternative to returning data from functions in C++

我有一个 C++ 程序,它使用ZMQ套接字接收数据并使用许多函数/子模块处理它。

这就是我打算做的:

在此处输入图像描述

这样可以使用相同的套接字将结果返回给数据提供者。

问题是,由于结果是在最后一步计算的,但我不想使用相同的管道返回它; 已经有很多通过引用调用和使用的值。 添加这个只会使我的系统复杂化。

我可以使用一个全局变量(例如vector ),然后用结果填充它。 main()可以类似地全局访问它。 由于我对 zmq 知识的一些限制,我只能发送简单的数据结构,如数组,而不能发送 STL 结构。 但是 arrays 大小不能预先计算,因为它取决于结果。 因此,我无法在全球范围内访问它。

我有什么选择?

我不认为这样的链接调用是有益的。 您的pre-process()不应该考虑结果的去向; 它不应该对infer()有任何了解并调用它; infer()也不应该知道post-process() 常规方法是使用组合调用的“上层结构”。

在最简单的版本中,它将类似于:

pipe += post_process( infer( pre_process( get_record( pipe ) ) ) ) ;

更有可能的是,这将是一个临时存储中间结果的序列,以便您可以使用调试器查看它们并报告进度。

raw_record = get_record( pipe );
pre_processed = pre_process( raw_record );
inference = infer( pre_processed );
result = post_process( inference );
pipe = combine_inputs( pipe, result );

在更高级的情况下,它将是某种“处理器”函数的动态队列,以便您可以在运行时从各种预处理器、推断/分析函数和后处理器组装它。

每个 function 都接受它的输入,返回它的 output,这与它发生的事情无关。 您有一个单独的过程来处理它们之间的正确数据流。

正如你们所建议的那样,我选择了级联回报。 由于我要返回多个变量,因此我使用了一个struct来容纳它们并一起返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM