gpt4 book ai didi

c++ - 一个类的独立名称

转载 作者:行者123 更新时间:2023-11-28 08:01:47 24 4
gpt4 key购买 nike

我们有 lua 类。

在 lua 类中有一个方法 registerFunc() 被定义为:

void lua::registerFun() {
lua_register( luaState, "asd", luaApi::asd);
lua_register( luaState, "zxc", luaApi::zxc);
}

lua_register 是 lua 库的内置函数:http://pgl.yoyo.org/luai/i/lua_register

它将 luaApi 类的静态方法作为第三个参数。

现在一些程序员想要使用 lua 类,所以他不得不创建自己的类,定义静态方法,例如:

class luaApi {
public:
static int asd();
static int zxc();
};

现在是重点。我不想(作为程序员)创建名为“luaApi”的类,但是例如我的 ClassForLuaApi。但现在这是不可能的,因为它明确地写在代码中 - 在 lua 类中:

lua_register( luaState, "asd", luaApi::asd); 

我必须将其更改为:

lua_register( luaState, "asd", myClassForLuaApi::asd);

但我不想(假设程序员无权访问那里)。

如果还是看不懂,我就放弃。 :)

谢谢。

最佳答案

你应该能够将任何方法作为 lua_register() 的第三个参数传递,只要它有正确的签名 (int (*)(lua_State *L) 又名 lua_CFunction)。它不必是类的静态成员,也可以是任何独立函数:

lua_register(luaState, "myFunction", &myFunction);

如果这不能满足您的要求,您应该添加一些更大的代码片段,例如你的 lua 类。如何向 lua_register() 添加新的调用实例?你在使用一些预定义的宏吗? lua 类里面的代码不可以修改吗?在后一种情况下,除非您使用一些预处理器定义或宏来“弯曲”您的名字,否则您无能为力。

编辑:如果你希望你的 lua 类的用户能够注册他们自己的函数,那么你应该允许他们将它作为参数传递给方法(基本上是 Lua 这样做的方式好吧):

void lua::registerFunction(const char *name, lua_CFunction *call) {
lua_register(luaState, name, call);
}

如果你想抽象掉 Lua 的状态对象,你也可以考虑做你自己的包装器,使用自定义对象调用用户的函数(具有 lua 对象以及所有参数和处理返回值)。

关于c++ - 一个类的独立名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11257359/

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