从 lambda 中获取捕获的变量?

2023-11-24

我想知道是否有办法获取 lambda 捕获的变量的类型/值? - 使用场景是类似的;

int a = 5;
auto lamb = [a](){ return a; };
static_assert(std::is_same<typename get_capture_type<0>(lamb)::type, int>::value, "");
assert(get_capture_value<0>(lamb) == 5)

Note: get_capture_*<N>(lambda)显然应该会导致编译器错误,当N > #captured_variables.

我需要的实际上只是一种以某种方式访问​​捕获的方法(如果可能的话)。也就是说,我可以自己进行模板元编程。


这是不可能的按设计

5.1.2 [表达式.prim.lambda]
15 [...] 对于复制捕获的每个实体,在闭包类型中声明一个未命名的非静态数据成员。这些成员的声明顺序未指定。 [...]
16 [...] 未指定是否在通过引用捕获的实体的闭包类型中声明其他未命名的非静态数据成员。

捕获的变量是未命名的(或者至少具有凡人无法说出的名称),并且故意未指定它们的声明顺序。通过引用捕获甚至可能不存在在闭合类型中。

无论如何你都不想这样做。您可能认为您这样做,但实际上并非如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 lambda 中获取捕获的变量? 的相关文章

随机推荐