Obsługa wyjątku

0

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();
  } 
0

Nie możesz, jeśli chcesz runtime_error to złap runtime_error:

try {
    throw std::runtime_error("jakis blad");
  } catch(std::runtime_error const& e) {
    UncheckedStausHandler::handle(e.what());
  } 
0

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
 */
0

UncheckedStatusHandler dostarczasz Ty, czy zadający zadanie? Jeśli Ty, to użyj std::current_exception, ale to jest działanie naokoło problemu :/

0

UncheckedStatusHandler dostarczam ja, a masz może jeszcze jakiś inny pomysł zamiast tego std::current_exception , bo nie wolno nam używać c++11

0

No to, jeśli kontrolujesz obie te klasy, pozostaje Ci chyba tylko jakaś flaga/zmienna globalna, którą być ustawiał i sprawdzał.

2
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";
  }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1