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.
Post History
I find myself often writing code like this. try { // code } catch( FailedReadException const & ex) { file.close(); std::cerr << "Read failure " << ex.readFailure() <&...
#2: Post edited
Multiple catches with almost the same code.
I find myself often writing code like this. ```C++ 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: ```C++ 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: Initial revision
Multiple catches with almost the same code.
I find myself often writing code like this. ```C++ 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: ```C++ 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?