类的独立名称
Independent name of a class
本文关键字:独立 更新时间:2023-10-16
我们有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"的类,而是例如myClassForLuaApi。但是现在这是不可能的,因为它是显式编写在代码中的 - 在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
对象以及所有参数和处理返回值)。
相关文章:
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 独立读取-修改-写入顺序
- 带有多个独立参数的C++For循环
- 通过命令行在Visual Studio中编译单个独立文件
- 如何将独立的 c 应用程序组合到 c++ 应用程序中?
- 我们能否在stm32f中使用硬件定时器控制两个独立的进程
- antlr 规则上下文是否可以独立于目标
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 多个 rocksdb 实例:使用单个共享缓存还是多个独立缓存?
- 在路径的独立Qt项目中包括外部库
- emplace_back初始化列表错误,当初始化列表在独立变量上工作时
- 为什么不同的翻译单元没有独立和沙盒的内存空间?
- 如何创建独立于平台的宏来包装编译器扩展?
- 使用system()创建独立的子进程
- 独立于编译器的类名
- 独立于实现的浮点/整数转换
- 在C++中将内部类实现为具有名称空间的独立类有什么好处
- 如何在C++中创建总是在循环中接受新输入的独立进程
- 如何在C++中打开多个独立的终端窗口
- 将两个独立的stdin重定向为程序的输入