gpt4 book ai didi

c++ - 如何捕获私有(private)成员子类对象的异常?

转载 作者:行者123 更新时间:2023-11-30 01:26:31 26 4
gpt4 key购买 nike

下面的伪代码,我想捕获类B中的子对象a抛出的异常,在B中保持这个对象私有(private)。如下所述的catch子句不起作用,因为对象a是私有(private)的在 B 中。如何捕获此异常?

编辑 我更改了伪代码以将 A 类嵌入到 B 类中。

class B
{
class A
{
public:
class Exception{};
A() throw(Exception) { ... } // A ctor throws an Exception class object
} a;
public:
B() { ... } // B ctor
};

int main()
{
try
{
B b;
}
catch( B::A::Exception& )
{
...
}

}

最佳答案

你不需要在 catch 子句中说 B::A::Exception ,除非类 A 定义在里面B。现在您已经将其编辑为制作B::A::Exception 是合适的if AB 之外可见并且 ExceptionA 之外可见...或者如果 B::A::Exception 以其他方式制作可用(例如通过 typedef,as suggested by pmr)。

如果不是,则根本不应该扔掉它。 (在这种情况下,它不是,所以是的。不要那样做。)如果他们甚至看不到异常的类型,他们如何合理地捕获该异常?

实现此目的的一种方法是将类的声明与成员变量的声明分开。有点像

class B {
public:
B() { }

class A {
public:
class Exception {};
A() { /* throw Exception(); */ }
};
private:
A a;
};

但坦率地说,typedef 听起来更优雅。

关于c++ - 如何捕获私有(private)成员子类对象的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10272317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com