在C++或C++ 11中重新抛出类型异常

rem*_*ezx 16 c++ design-patterns exception c++11

我需要为函数编写一个包装器.其目的是缓存结果以及可能的函数异常.它应该如下工作:在第一次执行期间,它应该执行函数并存储函数返回的结果(或异常).在下次执行期间,它应返回先前存储的结果或重新抛出捕获的异常.

问题是,我想存储异常类型.所以基本上我想捕获每种类型的异常,并在将来重新抛出它而不会丢失它的类型.

我正在使用C++或C++ 11,因此非常感谢使用其中一种语言的任何解决方案.

por*_*ges 22

你在找std::exception_ptr.

您可以使用std::current_exception(),获取当前捕获的异常,存储结果std::exception_ptr,稍后将其抛出std::rethrow_exception(std::exception_ptr)

在cppreference维基上有一个很好的使用示例.

  • @ danilo2:是的,但不便携.确切的机制取决于您正在使用的编译器和标准库的特定实现,它通常选择特定的ABI(如gcc和clang等使用的Itanium ABI).您可以使用内部ABI机制,但它仅适用于基于该ABI的实现.此外,在早期版本的C++中,它不确定ABI是否会允许标准现在要求的所有内容.`std :: exception_ptr`(以及所有相关的机器)已经在C++ 11中引入,正是为了弥补这一差距并提供统一的接口 (3认同)