Próbuję debugować moją aplikację za pomocą wyjątków catch-rethrows. Mój kod obsługi wyjątków jest dłuższy niż niektóre bloki, które debiuję, a wszystkie są wklejane z kopią.Jak zrobić kod wyjątku DRY?
Czy istnieje lepszy sposób na wielokrotne wyrażanie poniższego kodu? Podejrzewam, że makra są tutaj, ale zwykle unikam makr takich jak dżuma.
try {
// Code here...
}
catch (std::exception & e)
{
ErrorMsgLog::Log("Error", "std exception caught in " __func__ " " __FILE__ " " __LINE__, e.what());
throw e;
}
catch (Exception & e)
{
ErrorMsgLog::Log("Error", "Builder exception caught in " __func__ " " __FILE__ " " __LINE__, e.Message);
throw e;
}
catch (...)
{
ErrorMsgLog::Log("Error", "Unknown exception caught in " __func__ " " __FILE__ " " __LINE__);
throw std::runtime_error ("Unknown Exception in " __func__ " " __FILE__ " " __LINE__);
}
'dalej' wszystkie wyjątki do funkcji szablonowej? – user2485710
Spraw, aby 'wyjątek' był podtypem' std :: exception', tak jak każdy normalny typ wyjątku. – rightfold
1. To nie jest C++ 11. Nie można przekazać dalej. 2. Wyjątkiem jest klasa Borland C++ Builder. Poza tym, nawet gdybym tylko * potraktował wyjątek std ::, nadal chciałbym odejść od wklejenia kopii. – QuestionC