2012-09-15 19 views
6

Suponiendo que estamos escribiendo una biblioteca y que queremos para proporcionar un control de grano fino sobre errores y excepciones:¿Cómo debemos implementar la API compatible con std :: error_code?

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

Sould que implementar foo() como lanzar un std::system_error y dejar foo(std::error_code&) captura toda excepción y extraer el código_error.

O sould implementamos foo(std::error_code&) como una función nunca tirar y tirar una función en foo() dependiendo de la presencia de un código de error?

+1

Mira boost :: asio por ejemplo. http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio/reference/basic_stream_socket/connect.html – ForEveR

+1

Diría que también depende de lo que 'foo()' haga. – netcoder

Respuesta

3

boost biblioteca funciona con excepciones y con boost::system::error_code, entonces, creo que puede orientar en esta biblioteca. Por ejemplo boost::asio::basic_stream_socket::connect tiene dos versiones

void connect(
    const endpoint_type & peer_endpoint); 

impulso :: :: sistema SYSTEM_ERROR Lanzado en caso de fallo.

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

CE fija para indicar qué error se produjo, en su caso.

Pero depende de lo que foo haga, creo que también.

-4

Menos excepciones siempre es mejor, por lo que debe utilizar el segundo.

Cuestiones relacionadas