簡體   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