Lambdas可以使用[=]
语法从创建它们的上下文中捕获成员。我假设lambda中必须存在一个状态引用,类似于this
指针。
class Class
{
public:
void Function()
{
/*
* pass this lambda expression as parameter to another
* function and from there recover the this pointer which
* would be of the type Class* for further usage.
*/
[=](int)->int { /* do something with this->Member */ }
}
private:
int Member;
};
有没有办法从lambda表达式中获取引用指针?
答案 0 :(得分:4)
不,您无法从lambda对象恢复捕获的值或引用。
lambda类型没有公共数据成员,唯一的公共成员函数是函数调用操作符,构造函数,析构函数,赋值运算符和转换为函数指针运算符(如果它没有捕获任何内容)。这些都不能用于提取捕获的实体。
答案 1 :(得分:2)
补充迈克的答案:你可以通过在调用时返回(或将其存储在out-parameters中)来实际恢复存储在lambda中的任何信息。甚至可以捕获对lambda中变量的引用,记住只要lambda存在,引用才可用。
当然,这可能需要改变lambda的签名。
[=](int i) -> std::pair<int, X*> {
return std::make_pair(i, this);
}
答案 2 :(得分:0)
尝试[this]而不是[=]。
我建议进一步参考 http://www.cprogramming.com/c++11/c++11-lambda-closures.html
目前我倾向于在大多数时候使用[&amp;]作为捕获。它很便宜,通常lambda表达式足够短,所以这是安全的。