1

[=]Lambda 可以使用语法从创建成员的上下文中捕获成员。我假设必须有一个状态引用存储在 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 表达式中获取引用指针?

4

3 回答 3

4

不,您不能从 lambda 对象中恢复捕获的值或引用。

lambda 类型没有公共数据成员,唯一的公共成员函数是函数调用运算符、构造函数、析构函数、赋值运算符和转换为函数指针的运算符(如果它不捕获任何内容)。这些都不能用于提取捕获的实体。

于 2013-04-02T11:10:19.180 回答
2

为了补充 Mike 的回答:您实际上可以恢复存储在 lambda 中的任何信息......通过在调用时返回它(或将其存储在 out-parameters 中)。甚至可以在 lambda 中捕获对变量的引用,请记住,该引用仅在 lambda 存在时才可用。

当然,这可能需要更改 lambda 的签名。

[=](int i) -> std::pair<int, X*> {
    return std::make_pair(i, this);
}
于 2013-04-02T13:06:58.520 回答
0

试试 [this] 而不是 [=]。

如需进一步参考,我建议 http://www.cprogramming.com/c++11/c++11-lambda-closures.html

目前我倾向于使用 [&] 作为捕获大部分时间。它很便宜,而且通常 lambda 表达式足够短,所以这是安全的。

于 2013-04-02T11:08:41.707 回答