c++lambda表达式捕捉this后传参不兼容
当lambda表达式捕捉了this指针后,lambda函数中访问的成员变量和成员函数都需要通过this指针访问。如果lambda函数需要传递参数,则需要保证传递的参数类型与lambda函数中使用的类型兼容。
如果出现传参不兼容的情况,可能是因为lambda函数中使用了类的私有成员,而传递的参数没有访问权限。此时可以考虑将私有成员改为公有成员,或者在类中添加访问函数来实现对私有成员的访问。
另外,在lambda函数中使用成员函数时,需要注意成员函数的调用方式。例如,若成员函数需要传递参数,则需要使用this指针来调用成员函数,例如:
// 定义类
class MyClass {
public:
void myFunc(int arg) {
// lambda表达式
auto func = [this, arg]() {
// 使用this指针调用成员函数
int result = this->anotherFunc(arg);
// ...
};
}
int anotherFunc(int arg) {
// ...
}
};
在lambda表达式中,使用this指针来访问成员函数,并将参数arg作为参数传递给成员函数anotherFunc。需要注意的是,如果成员函数不需要传递参数,可以直接使用成员函数名称进行调用,例如:
// 定义类
class MyClass {
public:
void myFunc() {
// lambda表达式
auto func = [this]() {
// 直接调用成员函数
int result = this->anotherFunc();
// ...
};
}
int anotherFunc() {
// ...
}
};
总之,在lambda表达式中捕捉this指针并传递参数时,需要保证参数与类型兼容,并注意成员函数的调用方式
原文地址: https://www.cveoy.top/t/topic/fIr5 著作权归作者所有。请勿转载和采集!