我已经编写了这段代码来捕获ppl发布的错误
try
{
parallel_for (m_row_start, m_row_end + 1, [&functionEvaluation,varModel_,this](int i)
{
// do things
});
}
catch(const std::exception error_)
{
QString t(error_.what());
}
try
{
return functionEvaluation.combine(plus<double>());
}
catch(const std::exception error_)
{
QString t(error_.what());
}
虽然我强烈怀疑它确实引发了异常(但try{}catch(...){}
抓住了std::exception
而没有明确的消息,但没有发现任何错误。
我正确的用于捕获ppl代码中引发的异常的语法?
答案 0 :(得分:3)
您的语法是正确的,尽管您没有理由不能通过引用捕获以避免不必要的异常对象复制:
catch(const std::exception & error_)
std::exception
。出于调试目的,您可以添加额外的catch块:
catch(...)
{
cout << "Unknown exception" << endl;
}
只是为了检查你是否收到任何类型的异常,但我不会将其留在生产代码中,因为没有办法对异常做任何有用的事情。
答案 1 :(得分:0)
首先,检查抛出的内容。如果您输入错误,它将不会做出反应。也许它只是CONST标记? const-type与非const-type不同,但实际上我不记得catch是const-volatile敏感的。
其次,除非出现强烈的理由,否则始终以引用方式引用:
catch(std::exception& error)
如果不这样做,则会发生异常复制:http://www.parashift.com/c++-faq/what-to-catch.html通过复制我的意思是对象复制,而不是重新提升;)