我创建了一个抛出异常的函数,但在某些情况下我希望它只是忽略这个异常。
我这样写了我的代码,但它不太优雅:
try {
myFunction();
} catch (...) {}
C ++是否有另外一种方式来写这个?
答案 0 :(得分:2)
不,这就是你写它的方式。
它本身并不坏,但是如果您发现您的代码由于您使用此构造的次数而变得丑陋,那么这可能是您的信号。重新使用它。
我发现自己偶尔会忽略异常,但如果它是"规范"对你而言,你的设计可能出现问题。
答案 1 :(得分:2)
不,没有。
你可以遵循标准在这种情况下的做法,即将函数重载两次,一次使用std::nothrow_t,一次不使用。使用后者来包装第一个
std::error_code my_function(std::nothrow_t) noexcept;
void my_function(); //throws
答案 2 :(得分:0)
您可以编写这样的禁止包装模板方法:
#include <utility>
template< typename Callable, typename... Arguments > void
Ingnore_Exceptions(Callable && method, Arguments && ... arguments) noexcept
{
try
{
method(::std::forward< Arguments >(arguments)...);
}
catch(...)
{
// Do nothing.
}
}
void
May_Throw(int, char const *)
{
throw(-1);
}
int
main(int, char**)
{
Ingnore_Exceptions(May_Throw, 42, "whatever");
return(0);
}
答案 3 :(得分:0)
正确的方法是
try
{
MyFunction () ;
}
catch (ExpectedExceptionType &e)
{
// Do nothing
}
答案 4 :(得分:0)
我正在使用下面的宏:
#define IGNORE_EXCEPTIONS(stmt) \
try { \
stmt \
} catch (...) { \
}
您可以像这样将语句传递给宏:
IGNORE_EXCEPTIONS(delta();
gamma();)
上面的宏扩展为:
try { delta();gamma(); } catch (...) { }
如果要在try块中使用变量,则必须在调用宏之前声明它们:
double res = 0.0;
IGNORE_EXCEPTIONS(res = delta();)
// Use res variable here. Do not forget res variable may not be changed in try block
答案 5 :(得分:-1)
我们可以直接忽略该异常。如果你想忽略异常
try
{
myFunction();
}
catch(Exception)
{}
它将捕获所有异常,并且由于空catch块而不执行任何操作,并且您的忽略条件得到满足。