Questo è un esempio di ciò che faccio spesso quando voglio aggiungere alcune informazioni a un'eccezione:
std::stringstream errMsg;
errMsg << "Could not load config file '" << configfile << "'";
throw std::exception(errMsg.str().c_str());
C'è un modo più carino per farlo?
std::string
ha un costruttore implicito che prende un const char*
...
std::exception
classi figlie di MS ed è usato dalle loro versioni di std::runtime_error
e std::logic_error
. Oltre a quelli definiti dallo standard, la versione di MSVS <exception>
include anche altri due costruttori, uno take (const char * const &)
e l'altro taking (const char * const &, int)
. Sono usati per impostare una variabile privata const char * _Mywhat
,; se _Mywhat != nullptr
, quindi viene what()
ripristinato per impostazione predefinita. Il codice che si basa su di esso probabilmente non è portabile.
std∷exception
non hai un costruttore conchar*
arg.