Sto cercando di convincere il mio team a consentire l'uso di eccezioni in C ++ invece di restituire un bool isSuccessful
o un enum con il codice di errore. Tuttavia, non posso contrastare questa sua critica.
Considera questa libreria:
class OpenFileException() : public std::runtime_error {
}
void B();
void C();
/** Does blah and blah. */
void B() {
// The developer of B() either forgot to handle C()'s exception or
// chooses not to handle it and let it go up the stack.
C();
};
/** Does blah blah.
*
* @raise OpenFileException When we failed to open the file. */
void C() {
throw new OpenFileException();
};
-
Considera uno sviluppatore che chiama la funzione
B()
. Controlla la sua documentazione e vede che non restituisce eccezioni, quindi non cerca di catturare nulla. Questo codice potrebbe mandare in crash il programma in produzione. -
Considera uno sviluppatore che chiama la funzione
C()
. Non controlla la documentazione, quindi non rileva eccezioni. La chiamata non è sicura e potrebbe causare il crash del programma in produzione.
Ma se controlliamo gli errori in questo modo:
void old_C(myenum &return_code);
Uno sviluppatore che usa quella funzione sarà avvisato dal compilatore se non fornisce quell'argomento, e dirà "Aha, questo restituisce un codice di errore che devo controllare."
Come posso usare le eccezioni in modo sicuro, in modo che ci sia una sorta di contratto?