我有一个函数可以检查正则表达式并根据正则表达式结果返回std::vector<int>
。我需要检查功能是否失败/成功。在成功返回向量对象上,失败nullptr
以便稍后检查if (somefunc() == nullptr) // do smth
答案 0 :(得分:11)
返回类型std::vector<int>
的值不能是nullptr
。
在这种情况下最直接的方法是返回std::unique_ptr<std::vector<int>>
- 在这种情况下,可以返回nullptr
。
其他选择:
optional<std::vector<int>>
作为返回类型(如果您的编译器具有此C ++ 17功能,则为boost::optional
或std::optional
)bool
参数并将std::vector<int>&
作为函数的输出参数最好的方法取决于用例。 例如,如果大小为0的结果向量等同于“失败” - 请随意在代码中使用此类知识,并检查返回向量是否为空以了解函数是否失败或成功。
在我的练习中,我几乎总是坚持返回optional
(提升或标准,取决于环境限制)。
这种界面是说明“结果可以存在与否”这一事实的最明确的方式。
总结一下 - 这对唯一正确的解决方案来说不是问题。 上面列出了可能的选项 - 这只是您个人经历和环境限制/对话的问题 - 可供选择的选项。
答案 1 :(得分:1)
您可以返回std::unique_ptr<std::vector<int>>
并检查该值,或抛出异常,或选中vector.size() == 0
等。
答案 2 :(得分:0)
有许多不同的选择:
返回std::vector<int>*
指针,可选地包含在std::unique_ptr
中以进行生命周期管理。失败时返回nullptr
。
通过引用参数传递std::vector
,然后返回bool
表示成功/失败。
在失败时抛出异常。
返回std::pair<std::vector<int>, bool>
,其中second
字段对表示成功/失败。