从lambda获取捕获的变量?

Ske*_*een 7 c++ lambda c++11 c++14

我想知道,如果有办法获得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)
Run Code Online (Sandbox Code Playgroud)

注意:get_capture_*<N>(lambda)显然应该导致编译错误N > #captured_variables.

我需要的只是一种以某种方式访问​​捕获的方法,如果可能的话.也就是说,我可以自己做模板元编程.

Jon*_*ely 16

这是不可能的设计

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

捕获的变量是未命名的(或至少具有凡人无法形容的名称),并且故意未指定其声明顺序.封闭类型中甚至可能不存在引用捕获.

无论如何你不想这样做.你可能认为你这样做,但你并不是这样.


MSa*_*ers 5

没有.C++没有反射,这意味着它也没有对lambda的反射.