我有以下情况:
try{
auto result = do_something(some_input); //do_something() may throw exceptions
if (result == bad){
do_something_else(some_input);
}
}
catch(...){
do_something_else(some_input);
}
一些解释:
do_something()
返回bad
如果流程成功但流程的准确性不是那么好(计算机视觉流程)。do_something()
如果由于某些信息丢失或输入非常糟糕而无法处理数据,则抛出异常。do_something_else()
。我的问题:
理论代码:
auto result = do_something(some_input); //do_something() may throw exceptions
if (result == bad OR exception was thrown){
do_something_else(some_input);
}
答案 0 :(得分:2)
我建议这样的事情
bool suceeded = false;
try
{
auto result = do_something
if (result != bad)
{
succeeded = true;
}
}
catch (specific_exceptions)
{
// Log or do something useful here
}
if (!succeeded)
{
do_something_else
}
else
{
use result
}
这会尝试保持您的应用程序的自然流量超出特殊情况,并以自己独特的方式处理这两个失败,同时仍然将它们汇集到一个连续的案例中。
答案 1 :(得分:1)
您可以包装方法:
auto try_do_something(SomeInputType& someinput) noexcept
{
try {
return do_something(some_input); //do_something() may throw exceptions
} catch (...) {
// extra logging ?
return bad;
}
}
然后
if (try_do_something(some_input) == bad) {
do_something_else(some_input);
}
答案 2 :(得分:0)
就个人而言,我会选择以下内容:
try {
auto result = do_something(some_input);
if (result == bad) throw BadResultException();
} catch (...) {
do_something_else(some_input);
}
当然,这需要您定义自己的异常类型,但这相当简单。
要严格回答你的问题,不,不,你所提出的问题是不可能的,因为例外情况如何起作用。你需要做这样的事情(或你建议的解决方案)。