我们有 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/