我想嵌入lua以允许在我的C ++应用程序中编写脚本。特别是,我有两个结构,我想作为参数传递给给定的lua函数。一个是只读的,另一个是读/写的。这些结构的高度简化的例子如下:
struct inData
{
int x;
int y;
//many other fields follow
};
struct outData
{
int a;
double b;
//other fields follow
};
这两个结构都是在C ++代码中创建的,并且在调用lua函数之前和之后都会在那里进行处理。如何将这些结构传递给lua函数,以便函数可以执行以下操作:
if(inData.x > 5) then outData.a = 1 end
并且从lua函数返回后,outData实例实际上保留了更改吗?
答案 0 :(得分:6)
无聊+样板+多语言= SWIG。
答案 1 :(得分:1)
您还可以创建一个Lua表,该表反映了相同的数据结构,用于在C和Lua之间传递信息。
答案 2 :(得分:0)
您可以使用userdata并在其中添加outdata *。您可以在它们上设置自定义函数,包括metatable。我不打算通过它,因为它是太多的样板/胶水代码。基本上,你在堆上创建outdata,你使light userdata指向它(通过一个令人难以置信的邪恶演员),然后你设置一个自定义metatable并使用__index来使用自定义函数进行数据访问。
基本上,这是可行的但是很无聊。同样危险,因为Lua不理解任何C(或C ++)类型,并且你一直在处理void *。