Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Comments on Multiple catches with almost the same code.
Post
Multiple catches with almost the same code.
+7
−0
I find myself often writing code like this.
try {
// code
}
catch( FailedReadException const & ex) {
file.close();
std::cerr << "Read failure " << ex.readFailure() << std::endl;
std::lock_guard<std::mutex> lock(mutexFile);
errorState = true;
}
catch( std::runtime_error const & ex) {
file.close();
std::cerr << "Read failure " << ex.what() << std::endl;
std::lock_guard<std::mutex> lock(mutexFile);
errorState = true;
}
catch(...) {
file.close();
std::cerr << "Read failure " << "unexpected error" << std::endl;
std::lock_guard<std::mutex> lock(mutexFile);
errorState = true;
}
I'd like to make it easier to read by factoring all that common code. I could use a function for that. But that moves the code away from where it is used. I'd rather have it there in the catch for easier reading. Best I've come up with is this:
try {
// code
}
#define CATCH(reason) {\
file.close(); \
std::cerr << "Read failure " << reason << std::endl; \
std::lock_guard<std::mutex> lock(mutexFile); \
errorState = true; \
}
catch( FailedReadException const & ex)
CATCH(ex.readFailure())
catch( std::runtime_error const & ex)
CATCH(ex.what())
catch(...)
CATCH("unexpected error")
#undef CATCH
Is there a better way to do this?
1 comment thread