Я написал этот кусок кода, чтобы поймать ошибку, запущенную 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?
Ваш синтаксис правильный, хотя нет причин, по которым вы не могли бы перехватить ссылку, чтобы избежать ненужного копирования объекта исключения:
catch(const std::exception & error_)
std::exception
,В целях отладки вы можете добавить дополнительный блок catch:
catch(...)
{
cout << "Unknown exception" << endl;
}
Просто чтобы проверить, не выдается ли какое-либо исключение, однако я бы не оставил это в рабочем коде, потому что нет никакого способа сделать что-либо с этим исключением.
Во-первых, проверьте, что бросили. Если вы неправильно напечатаете улов, он не будет реагировать. Может быть, это просто маркер CONST? const-type отличается от non-const-type, но на самом деле я не очень хорошо помню, являются ли уловки чувствительными к const-volatile.
Во-вторых, если нет веских причин, всегда ловите по ссылке:
catch(std::exception& error)
Если вы этого не сделаете, то произойдет копирование исключения: http://www.parashift.com/c++-faq/what-to-catch.html Под копированием я подразумеваю копирование объектов, а не повторное поднятие;)