Nie wiem, jak sformułować pytanie bardzo dobrze w krótkim temacie, więc pozwólcie, że spróbuję dłuższego wyjaśnienia. Załóżmy, że mam te klasy wyjątków:Czy możesz złapać wyjątek według typu operatora konwersji?
class ExceptionTypeA : public std::runtime_error
{
// stuff
};
class ExceptionTypeB : public std::runtime_error
{
// stuff
operator ExceptionTypeA() const; // conversion operator to ExceptionTypeA
};
Czy mogę to zrobić, i czy spowoduje to blok catch?
try
{
throw ExceptionTypeB();
}
catch (ExceptionTypeA& a)
{
// will this be triggered?
}
Idę się domyślić, że to nie będzie, co jest niefortunne, ale pomyślałem, że pytam, ponieważ nie mogłem znaleźć żadnych informacji na jej temat w internecie lub na SO. I tak, zdaję sobie sprawę, że mogłem po prostu uruchomić program w moim kompilatorze i zobaczyć, co się stanie, ale to nie powiedziałoby mi, co standard mówi o tym zachowaniu, tylko o tym, co mój kompilator implementuje (i nie ufam temu).
Uff. Tu westchnienie ulgi. – sbi
czy obejmuje to wskaźnik dla członków? na przykład wskaźnik do danych pręta jest kontrawariantny, więc 'int (Base :: *)' można przekonwertować na 'int (Derived :: *)'. czy mogę złapać to ostatnie, jeśli rzucę tym pierwszym? gcc wydaje się nie zgadzać, ale standardowe sformułowanie jest nieco niejasne. – max