gpt4 book ai didi

c++ - 如何在 catch 语句之外使用异常

转载 作者:行者123 更新时间:2023-11-27 23:54:46 25 4
gpt4 key购买 nike

我有一个函数可能会抛出一个变量类型的异常,但是都继承自std::exception:

int errorCheck(int a)
{
if(a < 0)
throw a_too_small();
if(a>10)
throw a_too_big();
return a*2;
}

我想使用 Qt 的 SIGNAL/SLOT 机制来处理这个异常。

try {
errorCheck(a);
} catch(std::exception &e) {
emit errorSignal(e);
}

如果errorSignal的签名是errorSignal(std::exception e),则原始异常对象被切片,其类型丢失。另一方面,如果签名是 errorSignal(std::exception &e),则异常 e 会离开 catch 范围,我相信这是不允许的。

处理这个问题的最干净的解决方案是什么?

最佳答案

如果可以使用C++11,你可以尝试使用std::exception_ptr :

try {
...
} catch (...)
std::exception_ptr except = std::current_exception();
emit signal(except);
}

然后在你的位置上:

void myslot(std::exception_ptr e) {
try {
if (e) {
std::rethrow_exception(e);
}
} catch (...) {
...
}
}

关于c++ - 如何在 catch 语句之外使用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43346313/

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