![]() |
1
51
每个lambda表达式都引入一个闭包类型,该闭包类型对于周围的作用域是唯一的。所以你天真的尝试是行不通的,因为
但你是对的。C++允许您抛出任何对象。因此,如果您显式地将lambda转换为与异常处理程序匹配的类型,它将允许您调用该任意可调用类型。例如:
这可能有一个有趣的实用程序,但我要提醒大家不要抛出非源代码的东西
|
![]() |
2
24
C++允许你投掷任何东西。它可以让你抓住你扔的任何东西。当然,你可以扔一只羔羊。唯一的问题是,要捕获某个对象,您需要知道该对象的类型或至少父类型。由于lambda不是从公共基派生的,因此必须知道lambda的类型才能捕获lambda。主要问题是,每个lambda表达式都会给您一个
distinct type
. 这意味着您的投掷和捕获都需要基于相同的lambda表达式(注意:相同的表达式,而不仅仅是一些看起来完全相同的表达式)。在某种程度上,我可以想到的一种方法是封装lambda的创建,以加入一个函数。这样,您就可以在
here .
你也可以使用
|
![]() |
3
7
你可以抛接球
|
![]() |
4
1
lambda是唯一的匿名类型。命名lambda实例类型的唯一方法是将其存储在变量中,然后执行
有几种方法可以让你抓到一只被抛出的羔羊。
在这种情况下,你不能使用它,除了再次扔它。
您可以将其转换为
我们可以消除堆分配:
|
|
lfox · 如果列中不存在某个值,则停止代码执行 2 年前 |
![]() |
zaen · 将值传递到异常字符串消息中 2 年前 |
![]() |
Zephyr · 如何在双ListView选择系统上实现过滤器? 6 年前 |
![]() |
Aave · 错误数组长度的特定异常 6 年前 |