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

我正在尝试使用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*)}'|

我该如何将类中的方法传递给函数?

点赞
用户869951
用户869951

尝试

lua_pushcfunction(lua_state, &readFunctions::readAll);

readAll 是静态的,所以你不需要一个实例;并且你需要它的地址而不只是函数本身(函数像值一样,所以你需要给 pushcfunction 它的地址)。然而我无法记住编译器是否接受 int (readFunctions::*)(lua_State*) 作为 int (*)(lua_State*),我有一种感觉它可能不行,但现在无法测试。

如果你不想要一个静态方法,而是一个普通的方法:方法是对象(类的实例)的一部分,所以要调用它,你需要一个 this 指针;那样是行不通的。但是可能行得通的是使用你的静态 readFunctions::readAll,但当你调用那个函数时,第一个参数可以是一个轻量级用户数据,它是您想要调用的 readFunctions 实例。

2014-04-12 03:13:58