如何在LUA中创建一个C++兼容的函数对象
How to create a C++ compatible function object in LUA?
我正在考虑如何设计我的API,我计划在LUA中拥有一个带有脚本层的C++应用程序。
对于我设计中的几个关键点,我想让用户能够创建一个函数对象,表示他想在LUA中做什么,而不是将这个函数对象从LUA发送到C/C++。
在伪代码中,在C++中,我有一个class T
class T {
...
int num1 = 0;
float num2 = 0.0f;
std::string str{"NONE"};
...
};
我想用LUA提供的function object
来操作T
的实例,就像一样
void applyFunc(T t,F f){
f(t);
}
问题是,我在LUA中找不到任何创建函数对象的东西,比如C++11 lambda或std::function
,或者任何其他可以被视为函数对象的对象。
我真正的观点是:如何在LUA中定义一个C++兼容的函数对象?
问题是,我在LUA中找不到任何创建函数对象的东西,比如C++11 lambda或std::function或任何其他可以被视为函数对象的对象。
这就是function
关键字的作用。这个是一个lambda。将这些传递给C++并让C++代码调用它们是很容易的。
对此:
void applyFunc(T t,F f){ f(t); }
原则上很容易:将C++对象指针作为userdata
推到Lua堆栈上,并调用Lua函数。问题是Lua代码不能用C++指针做任何事情。
如果您希望Lua代码能够操纵您传递的对象,则需要用C++编写操纵器方法,并将它们公开给Lua。您通常通过为用户数据创建元表来实现这一点。
有一些库,这是自动为C++。如果你想手工(我更喜欢),你可能应该从这里开始。
如果你在谷歌上搜索"C++对象Lua_index",你会发现很多例子。我可以稍后编写一个示例,但我现在正在工作。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '