- 主题:lambda不能capture this指针
查一下deducing-this的use case. 基本都和template有关,不写template别用这玩意,别老想着枪毙自己
--
FROM 115.193.188.*
这玩意基本用途是为了把
struct A
{
void f();
void f() &&; // 当然,首先你得知道这是啥
}
这种东西用一个template解决
然后往邪门上走就是:
比如你写了个lambda, 然后你要把这玩意传来传去,然后内部的capture需要根据你这个lambda是rvalue还是lvalue有不同处理
--
FROM 115.193.188.*
你这里面captured this是class A的一个instance.
this auto,如果我理解的正确,表示的是fn这个lambda instance,因为 lambda定义本质上是一个struct定义。
相当于你同一个变量定义了两次,编译器肯定要报错,至于报static function可能是编译器回溯错误类型的问题。
【 在 allegro 的大作中提到: 】
: void A::f()
: {
: auto fn = [this](this auto){
: ...................
--
FROM 115.193.188.*
deducing this正确的命名方式应该是 this auto varname
你那个写法 直接连变量名都省略了 能正常有鬼了
不信你给deducing this一个变量名 看看会不会有问题
【 在 allegro 的大作中提到: 】
: 我们无论如何不会/不该尝试在lambda函数体内访问lambda的this。这应该是编译器支持deduce this的bug。
: - 来自 水木社区APP v3.5.7
--
FROM 36.21.11.*
lambda默认是const的 你要修改a需要加mutable 修饰
--
FROM 36.21.11.*