【发布时间】:2013-11-26 14:25:17
【问题描述】:
我想知道,是否有办法获取捕获的 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)
注意:get_capture_*<N>(lambda) 显然会导致编译器错误,而 N > #captured_variables。
如果可能的话,我实际上需要的只是一种以某种方式访问捕获的方法。也就是说,我可以自己进行模板元编程。
【问题讨论】:
-
编号。
-
这种使用场景听起来不像任何真正的代码所需要的。
-
@Skeen:这和不能窥视我交给你的函数对象的私有变量有什么不同?
-
为什么私有成员会在类本身之外产生任何影响?外界对我的实现细节没有任何断言。这不就是公共与私人的全部意义吗?
-
@Skeen:让我把这个问题转过来:您是否有任何用例表明知道捕获的内容很重要? lambda 或绑定对象或函子的全部目的是它实现的接口,如何调用它。它在调用时的作用对用户来说并不重要。如果您需要检查参数,请不要捕获它,将其作为参数传递,让调用者对其进行测试,然后使用它来调用 lambda。 (或者也可以编写自己的函子并提供所需的访问权限)