当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指针并传递参数时,需要保证参数与类型兼容,并注意成员函数的调用方式

c++lambda表达式捕捉this后传参不兼容

原文地址: https://www.cveoy.top/t/topic/fIr5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录