[英]How to return "not found" when return value is const reference
我有一個問題,當我使用這樣的東西時:
const MyList& my_list = getListForThisRegion(/*region ID, ...*/);
當找不到值時,我不知道返回什么。
我的問題是我想有一種方法來向調用者發出信號(當從getListForThisRegion
返回值時)“未找到值”。 如果我返回一個指針,我可以返回nullptr
,但我不知道如何使用引用來做到這一點。 所有我能想到的是有一些靜態成員not_found
型MyList
,並把它返回一個參考,但似乎丑陋。
是的,我無法返回值,因為列表是“胖”的並且經常使用。
編輯:很多很好的答案,但異常不是一個可以接受的解決方案,因為它被引發的次數很高( nbNotFound/nbCalls
的百分比很高)。
EDIT2:關於 boost::optional - 掌握有多復雜? 我的意思是它是否需要一些不明顯的知識(不明顯=不僅僅是知道語法的東西)?
有兩種慣用的方法來處理這個問題:
end
的迭代器)。或者
返回一個虛擬對象有點笨拙,並且您不會通過返回指針獲得任何好處,因為您仍然必須根據特殊值(null 或虛擬對象)檢查結果。
如何重寫函數以引用您將列表返回的“returnValue”? 然后該函數可以返回指示找到/未找到的布爾值。
bool getListForThisRegion(/*region ID, ...*/, MyList& ret_list);
我會編寫異常類(層次結構,如果需要)並在這種情況下拋出異常。
我只看到兩種可能性:要么在 MyList 類中有一個特殊成員聲明實例為“null”(未設置),要么可以拋出異常。
您可以按照std::map
的指導,在您的容器中插入一個默認構造的列表,並返回對該列表的引用。 顯然,這取決於默認列表和根本不存在的列表之間沒有語義差異。
您還可以添加一個查詢函數來搜索特定區域,如果有列表則返回 true,否則返回 false。 然后,您可以在訪問器保險箱中拋出異常,因為它不會經常發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.