假设您有以下层次结构。你有一个基类Animal,有一堆子类,如Cat,Mouse,Dog等。
现在,我们有以下情况:
void ftn()
{
throw Dog();
}
int main()
{
try
{
ftn();
}
catch(Dog &d)
{
//some dog specific code
}
catch(Cat &c)
{
//some cat specific code
}
catch(Animal &a)
{
//some generic animal code that I want all exceptions to also run
}
}
所以,我想要的是即使投掷了一只狗,我也想要执行Dog catch案例,还要执行Animal catch案例。你是怎么做到这一点的?
答案 0 :(得分:9)
另一个替代方案(除了try-within-a-try之外)是在一个从你想要的任何catch块调用的函数中隔离你的通用Animal处理代码:
void handle(Animal const & a)
{
// ...
}
int main()
{
try
{
ftn();
}
catch(Dog &d)
{
// some dog-specific code
handle(d);
}
// ...
catch(Animal &a)
{
handle(a);
}
}
答案 1 :(得分:7)
AFAIK,您需要将其拆分为两个try-catch-blocks并重新抛出:
void ftn(){
throw Dog();
}
int main(){
try{
try{
ftn();
}catch(Dog &d){
//some dog specific code
throw; // rethrows the current exception
}catch(Cat &c){
//some cat specific code
throw; // rethrows the current exception
}
}catch(Animal &a){
//some generic animal code that I want all exceptions to also run
}
}