gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:36:04 27 4
gpt4 key购买 nike

我正在尝试使用 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 实例你想打电话。

关于C++将类中的函数传递给另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23025357/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com