C++ 将类中的函数传递给另一个函数

C++ Passing a function that's in a class to another function

本文关键字:函数 另一个 C++      更新时间:2023-10-16

我正在尝试使用lua_pushcfunction(使用lua 5.2)。我有结构

class readFunctions {
    private:
        std::ifstream file;
    public:
       static int readAll(lua_State*);
};
int readFunctions::readAll(lua_State *L){
    std::string line;
    std::string nam;
    while (std::getline(file, line)) {
        nam = nam + line;
    }
    std::cout << nam;
    return 1;
}
readFunctions hand;

我使用lua_pushcfunction(lua_state, hand.readAll)并获得error: argument of type 'int (readFunctions::)(lua_State*)' does not match 'lua_CFunction {aka int (*)(lua_State*)}'|

如何将方法从类传递给函数?

尝试

lua_pushcfunction(lua_state, & readFunctions::readAll); 

readAll是静态的,因此您不需要实例;你需要它的地址,而不仅仅是函数(函数就像一个值,所以你需要给pushcfunction它的地址)。然而,我不记得编译器是否会接受int (readFunctions::*)(lua_State*)作为int (*)(lua_State*),我有一种感觉,它可能不会,但现在不能测试它。

如果您不想要静态方法,而是想要常规方法:该方法是对象(类实例)的一部分,因此要调用它,您需要一个this指针;那行不通。但是,可以使用静态readFunctions::readAll,但当您调用该函数时,第一个参数可以是一个轻用户数据,即您要调用的readFunctions实例。