Mi chiedo, c'è un modo migliore per scrivere codice quando ci sono funzioni con ritorni di stato.Codifica delle migliori pratiche C++
Di seguito è riportato un esempio. (Si prega di ignorare gli errori di codice semplici se ce ne sono. Sono in particolare parlando della struttura. Inoltre, io sono al lavoro e non hanno un compilatore su questo computer)
#include "Session.h"
Session::Session(const char * IPaddress, unsigned int openPort)
{
ssh_session mySession;
hostIP = IPaddress;
port = openPort;
}
int Session::cBeginSession()
{
try
{
int status = ssh_options_set(mySession, SSH_OPTIONS_HOST, &hostIP);
if (status == 0)
{
status = ssh_options_set(mySession, SSH_OPTIONS_LOG_VERBOSITY,
SSH_LOG_PROTOCOL);
if(status == 0)
{
status = ssh_options_set(mySession, SSH_OPTIONS_PORT, &port);
if (status == 0)
{
std::cout << "Session started\n";
return 0;
}
else
{
std::cout << "Unable to set port\n";
return -3;
}
}
else
{
std::cout << "Protocol option log verbosity unable to set\n";
return -2;
}
}
else
{
std::cout << "Unable to set Host address\n";
return -1;
}
}
catch (...)
{
std::cout << "Unknown exception occurred\n";
return -8;
}
}
Io di solito uso se- altre istruzioni con i parametri di stato, ma tendo a finire con nidi grandi di istruzioni if-else se ci sono più di una o due funzioni coinvolte. C'è un modo più leggibile per scrivere qualcosa del genere? Diventa un nido di topi molto rapidamente.
MODIFICA: Grazie per tutte le risposte. Penso di avere alcune idee su come strutturare meglio il mio codice. Apprezzo tutti i suggerimenti diligenti.
penso eccezioni sono i migliori in generale. Ma assicurati che il tuo codice sia [eccezionalmente sicuro] (https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Resource_Acquisition_Is_Initialization). –
È più forte di "penso". Le eccezioni sono * il * metodo raccomandato e standard per comunicare un errore quando ci si aspetta che un'operazione abbia successo. –