2012-09-15 12 views
6

Supponendo stiamo scrivendo una libreria e che vogliamo fornire un controllo a grana fine nel corso degli errori e delle eccezioni:Come dovremmo implementare l'API compatibile std :: error_code?

void foo(); 
void foo(std::error_code&); 

Sould abbiamo implementare foo() come gettare un std::system_error e lasciare foo(std::error_code&) fermo tutto eccezione e estrarre l'error_code.

Oppure è possibile implementare foo(std::error_code&) come una funzione di non lancio e inserire una funzione in foo() in base alla presenza di un codice di errore?

+1

Guarda boost :: asio per esempio. http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio/reference/basic_stream_socket/connect.html – ForEveR

+1

Direi che dipende anche da cosa 'foo()' fa. – netcoder

risposta

3

boost la libreria funziona con le eccezioni e con boost::system::error_code, quindi, penso che tu possa orientarti su questa libreria. Per esempio boost::asio::basic_stream_socket::connect ha due versioni

void connect(
    const endpoint_type & peer_endpoint); 

boost :: :: sistema SYSTEM_ERROR Gettato in caso di fallimento.

boost::system::error_code connect(
    const endpoint_type & peer_endpoint, 
    boost::system::error_code & ec); 

CE impostato per indicare ciò che si è verificato l'errore, se presente.

Ma dipende da cosa foo, penso anche io.

-4

Meno eccezioni è sempre meglio, quindi è necessario utilizzare il secondo.

Problemi correlati