Saltar al contenido

Cómo lanzar una excepción de C++

Investigamos en el mundo on line para traerte la solución a tu inquietud, en caso de preguntas déjanos tu pregunta y te respondemos con gusto, porque estamos para ayudarte.

Solución:

Sencillo:

#include 

int compare( int a, int b )  b < 0 ) 
        throw std::invalid_argument( "received negative value" );
    

La biblioteca estándar viene con una buena colección de objetos de excepción incorporados que puede lanzar. Ten en cuenta que siempre debes lanzar por valor y atrapar por referencia:

try 
    compare( -1, 3 );

catch( const std::invalid_argument& e ) 
    // do stuff with exception... 

Puede tener varias declaraciones catch() después de cada intento, por lo que puede manejar diferentes tipos de excepción por separado si lo desea.

También puede volver a lanzar excepciones:

catch( const std::invalid_argument& e ) 
    // do something

    // let someone higher up the call stack handle it if they want
    throw;

Y para capturar excepciones independientemente del tipo:

catch( ... )  ;

Solo agrega throw donde sea necesario, y try bloquear a la persona que llama que maneja el error. Por convención, solo debe arrojar cosas que se derivan de std::exceptionasí que incluye primero.

int compare(int a, int b) 

void foo() 
    try 
        compare(-1, 0);
     catch (const std::invalid_argument& e) 
        // ...
    

Además, busque en Boost.Exception.

Aunque esta pregunta es bastante antigua y ya ha sido respondida, solo quiero agregar una nota sobre cómo manejar adecuadamente las excepciones en C++ 11:

Utilizar std::nested_exception y std::throw_with_nested

Se describe en StackOverflow aquí y aquí, cómo puede obtenga un seguimiento de sus excepciones dentro de su código sin necesidad de un depurador o registro engorroso, simplemente escribiendo un controlador de excepciones adecuado que volverá a generar excepciones anidadas.

Dado que puede hacer esto con cualquier clase de excepción derivada, ¡puede agregar mucha información a dicho rastreo! También puede echar un vistazo a mi MWE en GitHub, donde un seguimiento se vería así:

Library API: Exception caught in function 'api_function'
Backtrace:
~/Git/mwe-cpp-exception/src/detail/Library.cpp:17 : library_function failed
~/Git/mwe-cpp-exception/src/detail/Library.cpp:13 : could not open file "nonexistent.txt"

Aquí tienes las comentarios y calificaciones

Si tienes alguna cuestión y capacidad de innovar nuestro post eres capaz de realizar una anotación y con mucho placer lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *