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

标签 c++ lua

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

相关文章:

c++ - 静态检查 const char* 包含空格

c++ - 如何使用转换函数模板将 map 转换为 vector

C++ 标准库 - 我应该什么时候使用它,什么时候不应该使用它?

c++ - 在Lua中存储Lua脚本

lua - 尝试索引本地( bool 值)

java - jedis llen 结果不等于 redis llen

c++ - 在 Marmalade SDK 中使用多个文件

c++ - 区分具有默认参数值的构造函数和空参数列表

c++ - 如何在 C++ 中获取预加载的模块名称

android - 摩艾安卓构建问题