Czy jest możliwe przechwycenie wyjątku na etapie tworzenia obiektu bez przerywania pracy programu?
Korzystam z klasy, która odpowiada za ustanowienie połączenia z jakimś urządzeniem w przypadku jak to się nie powiedzie leci wyjątek, i ja chciałbym go przechwycić i pracować dalej ponieważ np. brak połączenia z jednym urządzeniem nie uniemożliwa pracy całego progamu.
Przykładowa klasa Wuu to właśnie klasa odpowiadająca za ustanawianie połączenia, zakładam, że nie mam do jej kodu dostępu, jestem tylko jej użytkownikiem.
class Wuu {
public:
Wuu(int v) : port(setPort(v)) {
};
int setPort(int p) {
if (p == 1111) {
return p;
} else {
throw 0;
}
}
private:
int port;
};
Klasa Foo, próbuje ustanowić połączenie, jeżeli się nie uda chciałbym przechwycić ten wyjątek w konstuktorze i pracować dalej.
class Foo {
public:
Foo(int i)
try : wuu(i) {
} catch (...) {
cout << "Exception Foo" << endl;
}
private:
Wuu wuu;
};
Tak samo w tej klasie chciałbym przechwycić wyjątek, który może wystapić w Foo
class Bar {
public:
Bar(Foo &foo)
try : foo(foo) {
} catch (...) {
cout << "Exception Bar" << endl;
}
private:
Foo foo;
};
int main(int argc, char** argv) {
Foo foo(555);
Bar bar(foo);
return 0;
}