在构建过程中捕获特定基础成员的异常
Catching exceptions for specific base members during construction
我知道,给定一个类foo
与一个基类base
,我可以写
foo(/*real code has parameters here*/) try :
base(), /*real code has parameters here*/
anotherMember(someFunction(/*some parameters here*/))
{
} catch (...){
}
但是是否有一种语法,我可以用来把try
catch
块围绕anotherMember
,而不是整个基本成员列表和构造函数体?
(注意anotherMember
是const
类型,因此需要在初始化器列表中)
这样做不太有意义,但由于anotherMember
从函数初始化,您可以将try..catch
放在该函数中。我假设它有一个不抛出的复制构造函数和一个可能抛出的复制构造函数,它接受参数,你的someFunction
调用那个。
如果anotherMember
不能正确构建,你想做什么?
您的明显替代方案是将anotherMember
包装在某种智能指针中,如果初始化失败,可能使其"可空"。如果您创建了自己的特殊对象,它将包含抛出的异常消息。
struct AnotherTypeWrapper
{
std::unique_ptr< AnotherType > ptr;
std::string errorMsg;
AnotherTypeWrapper( Args&& args... ) // ok probably not variadic
{
try
{
ptr.reset( new AnotherType( std::forward(args) ) ); // or whatever the syntax
}
catch( std::exception const& err )
{
errorMsg = err.what();
}
}
};
差不多。
相关文章:
- 是否允许分配器构造和销毁成员函数从内部逻辑引发异常?
- 在类声明中初始化 const 成员变量时在调试模式下出现异常
- 异常成员类 OOP
- 在字符串类上的成员函数和out_of_range异常处理
- 在使用 In Order 遍历成员函数时引发异常(堆栈溢出)时出现问题
- C++执行期间的类成员函数错误/异常处理
- 如果从类成员初始值设定项引发的异常调用 std::terminate()
- 从成员构造函数(Brace Initializer vs Initializer列表)抛出异常
- 在 C++ 中的构造函数中引发异常时销毁对象的成员变量
- 私有成员"current"的值在成员函数结束时发生异常更改
- 异常处理和成员变量
- C++C-tor处理默认成员值构造异常
- C++模板如果匹配类型else,则调用成员函数引发异常
- constexpr静态成员变量的异常行为
- 错误 C2248:无法访问在类中声明的私有成员,编译器行为异常
- 如何从私有成员子类对象捕获异常
- 在初始化成员变量期间有条件地处理异常
- 在构建过程中捕获特定基础成员的异常
- 使用 C++ Boost 的格式对象作为异常成员
- 如果在成员中抛出异常,则删除母对象