[英]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.