C++ 从lambda获取捕获的变量?

C++ 从lambda获取捕获的变量?,c++,c++11,lambda,c++14,C++,C++11,Lambda,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) inta=5; 自动lamb=[a](){返

我想知道,是否有办法获得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)
inta=5;
自动lamb=[a](){返回a;};
静态断言(std::is_same::value,“”);
断言(获取捕获值(lamb)==5)
注意:
get_capture_*(lambda)
显然会在
N>捕获的变量
时导致编译器错误


如果可能的话,我需要的实际上只是一种以某种方式访问捕获的方法。也就是说,我自己可以做模板元程序设计。

< P>不,C++没有反射,也就是说它也没有对λ的反射。

< P> >设计

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

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


反正你也不想这么做。你可能认为你有,但实际上你没有。

没有。​​​​​​​​​​​​​​​​​​这种使用场景听上去不像任何真正的代码需要的任何东西。@Skeen:这与不能窥视我提供给您的函数对象的私有变量有何不同?为什么私有成员会在类本身之外产生任何差异?外界无权断言我的实现细节。这不正是公共与私人的关系吗?@Skeen:让我把这个问题转过来:你有没有知道什么是被捕获的重要用例?lambda、绑定对象或函子的全部用途是它实现的接口,如何调用它。它在被调用时做什么对用户来说并不重要。如果需要检查参数,不要捕获它,将其作为参数传递,让调用方测试它,然后使用它调用lambda。(或者编写自己的functor并提供所需的访问权限)这就是我一直在寻找的答案。