【发布时间】:2017-02-20 15:39:23
【问题描述】:
如何捕获作为异常抛出的 lambda?我尝试了以下方法:
#include <functional>
int main() {
try {
throw [](){};
} catch (std::function<void()> & fn) {
fn();
}
}
但是输出是
在抛出一个实例后调用终止 'main::{lambda()#1}'
是否可以捕获抛出的 lambda 异常?
【问题讨论】:
-
请记住,每个 lambda 都有自己独特的类型,并且没有任何共同的基本类型。此外,抛出 lambda 似乎是个坏主意。
-
此外,您想通过抛出 lambda 来解决的实际问题是什么?你向我们展示了一个未知问题的想要的解决方案,并在没有告诉我们它应该解决什么的情况下向我们寻求解决方案的帮助。一个典型的XY problem。
-
我实际上不会那样编码,我只是想知道它是否可以在理论上起作用。我通常会尽可能避免在我的真实代码中出现异常,所以不用担心 ;)
-
总是有
catch(...),如果你不关心实际值,但需要抓住它。以后你甚至可以用std::exception_ptr来耍花招。
标签: c++