我试图使用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*)}'|
如何将方法从类传递给函数?
答案 0 :(得分:1)
尝试
lua_pushcfunction(lua_state, & readFunctions::readAll);
readAll是静态的,所以你不需要一个实例;并且你需要它的地址而不仅仅是函数(一个函数就像一个值,所以你需要给pushcfunction它的地址)。但是我不记得编译器是否会接受int (readFunctions::*)(lua_State*)
作为int (*)(lua_State*)
,我觉得它可能没有,但现在无法测试它。
如果你不想要一个静态方法而是一个常规方法:该方法是一个对象(类实例)的一部分,所以要调用它,你需要一个this
指针;这是行不通的。但可能有用的是使用静态readFunctions::readAll
,但是当您调用该函数时,第一个参数可以是一个轻量级用户数据,即您要调用的readFunctions
实例。