Cześć, mam problem z obsługą tak wyrzuconego wyjątku. W jaki sposób mogę się odnieść w funkcji handle() do std::runtime_error?
try {
throw std::runtime_error("jakis blad");
} catch(...) {
UncheckedStausHandler::handle();
}
To by było zbyt proste gdybym mógł zrobić tak jak mówisz. Mam takiego maina, którego nie mogę modyfikować i mam do niego dopisać klasę StatusCode i wszystko fajnie działa, oprócz tego że nie wiem jak otrzymać coś takiego "..Handling std::exception jakis blad" (ostatnia linia wyniku).
#include <iostream>
#include "StatusCode.h"
using namespace std;
int main() {
try {
{
StatusCode sc = StatusCode::ALLOK(); // wywolanie bezproblemowe
if ( sc.isok() )
cout << "ok " << endl;
else
cout << "not ok " << sc.info() << endl;
}
{
StatusCode sc = StatusCode::ERROR("Blad");
if ( sc.isok() )
cout << "ok " << endl;
else
cout << "not ok " << sc.info() << endl;
}
{
const StatusCode sc = StatusCode::ALLOK();
StatusCode sc2 = sc; // tu sc2 przejmuje funkcje sprawdzenia czy byl sprawdzony
sc2.isok();
std::cout << "Kod bledu sprawdzony, nie ma wyjatku.\n";
}
{
{
StatusCode sc = StatusCode::ALLOK();
}
std::cout << "Nie sprawdzamy kodu bledu\n";
}
} catch (...) {
UncheckedStausHandler::handle();
}
try {
throw std::runtime_error("jakis blad");
} catch(...) {
UncheckedStausHandler::handle();
}
}
/* wynik
ok
not ok Blad
Kod bledu sprawdzony, nie ma wyjatku.
..Handling UncheckedStatusCode
..Handling std::exception jakis blad
*/
UncheckedStatusHandler
dostarczasz Ty, czy zadający zadanie? Jeśli Ty, to użyj std::current_exception, ale to jest działanie naokoło problemu :/
void UncheckedStausHandler::handle() {
try {
throw;
} catch ( const std::exception &e ) {
std::cout << "...Handling std::exception " << e.what() << '\n';
}
catch ( const UncheckedStatusCode &e ) {
std::cout << "...Handling UncheckedStatusCode" << e.what() << '\n';
}
catch (...) {
std::cout << "...\n";
}
}
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.