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

时间:2014-04-12 02:22:00

标签: c++ lua

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

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

1 个答案:

答案 0 :(得分:1)

尝试

lua_pushcfunction(lua_state, & readFunctions::readAll); 

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

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