Mi chiedevo se fosse considerato OK gettare eccezioni che sono definite nella libreria standard C++, invece di creare la mia classe. Per esempio, consideriamo la seguente funzione (stupido) che prende una stringa come argomento:È corretto lanciare eccezioni definite nella libreria standard C++?
#include <stdexcept>
#include <iostream>
#include <string>
bool useless_function(const std::string& str) {
if (str == "true")
return true;
else if (str == "false")
return false;
else
throw std::invalid_argument("Expected argument of either true or false");
}
e poi, naturalmente, si potrebbe fare qualcosa di simile:
int main(int argc, const char** argv) {
try {
const bool check = useless_function("not true");
}
catch (std::invalid_argument& error) {
std::cerr << error.what() << '\n';
}
return 0;
}
ho letto here che il std::stoi
famiglia di funzioni genera un'eccezione std::invalid_exception
quando riceve un argomento non valido; è da lì che è nata l'idea di cui sopra.
C'è un'intera intestazione, "", con classi di eccezioni già pronte per l'uso, in modo che * non si spinga a inventare le proprie ruote. –