c++ 中 Lambda 的内部 this
Posted
技术标签:
【中文标题】c++ 中 Lambda 的内部 this【英文标题】:Lambda`s internal this in c++ 【发布时间】:2018-02-05 16:48:44 【问题描述】:如果 lambda 函数 ic C++ 是由 functor 实现的,为什么这是不可能的?
#include <iostream>
class A
public:
int a;
void f1() []()std::cout << this << std::endl ;();;
;
int main()
A a;
a.f1();
我收到错误 9:34: error: 'this' was not captured for this lambda function
。如果我理解正确,如果 lambda 被实现为仿函数类,为什么无法获得它的内部 this?
编辑:仿函数类的 this,而不是 A 类实例的 this。
【问题讨论】:
您需要像[this] ()
或通过值或引用来捕获它
@A.A 像你说的那样捕获它。
这是不可能的。有什么意义?
“lambda 是通过函子实现的”并不是真的。 Lambda 是一流的功能......它们由编译器本身实现。只是实际上,lambdas 最终基本上等同于以某种方式声明的匿名唯一结构。本质上注意鼬鼠这个词;它们不是 100% 相同的,这就是一个例子。可能它没有完成,因为 a) 没有用例,b) 当您在成员函数中声明 lambda 时,这允许 this 引用封闭类的 this。
你可以用它做的一件事就是递归。
【参考方案1】:
来自lambda:
出于名称查找的目的,确定 这个指针和访问非静态类成员,主体 在上下文中考虑闭包类型的函数调用运算符 的 lambda 表达式。
struct X
int x, y;
int operator()(int);
void f()
// the context of the following lambda is the member function X::f
[=]()->int
return operator()(this->x + y); // X::operator()(this->x + (*this).y)
// this has type X*
;
;
所以,不可能如你所愿引用this
。
【讨论】:
以上是关于c++ 中 Lambda 的内部 this的主要内容,如果未能解决你的问题,请参考以下文章