2017-06-10 57 views
1

我有一個函數,根據regex結果檢查正則表達式並返回std::vector<int>。我需要檢查功能是否失敗/成功。成功時返回矢量對象,失敗nullptr以後再查if (somefunc() == nullptr) // do smthC++。如何返回空指針而不是函數返回類型?

+2

「失敗」是什麼意思?你不能只返回一個空矢量?你甚至需要使用「null」?或者你不能只在你的函數調用中添加一個「狀態」變量?或者讓函數返回一個狀態,並通過引用傳遞向量? – paulsm4

回答

11

返回值的類型std::vector<int>不能是nullptr

在這種情況下,最直接的方法是返回std::unique_ptr<std::vector<int>>而不是 - 在這種情況下可以返回nullptr

其他選項:

  • 投的情況下,異常失敗
  • 使用optional<std::vector<int>>作爲返回類型(boost::optionalstd::optional如果你的編譯器有這個C++ 17功能)
  • 回報bool參數並具有std::vector<int>&作爲功能的輸出參數

最好的方法去真正去依賴於用例。 例如,如果大小0的結果向量等於'失敗' - 請隨意在代碼中使用這種知識,並檢查返回向量是否爲空以知道函數是失敗還是成功。

在我的練習中,我幾乎總是堅持返回optional(boost或std,取決於環境限制)。 這樣的界面是陳述「結果可以存在與否」的最明確的方式。

總結 - 這不是一個唯一正確的解決方案的問題。 上面列出了可能的選項 - 這只是您個人經驗和環境限制/召集的問題 - 可以選擇哪個選項。

+0

大家都解決這個問題嗎? – Herrgott

+0

這取決於您的使用情況 –

+0

感謝您的回答。我不想使用'boost'。想嘗試本地方法 – Herrgott

1

你可以返回一個std::unique_ptr<std::vector<int>>,並檢查該值,或者拋出一個異常,或檢查vector.size() == 0

+0

感謝您的回答 – Herrgott

0

有許多不同的選擇:

  • 回報std::vector<int>*指針,可選包在std::unique_ptr終身管理。失敗時返回nullptr

  • 通過std::vector通過參考參數,然後返回bool成功/失敗。

  • 在失敗時拋出異常。

  • 返回一個std::pair<std::vector<int>, bool>,其中對的second字段表示成功/失敗。