从嵌入式lua读取和编写C结构

时间:2010-09-13 19:57:09

标签: c++ struct lua

我想嵌入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实例实际上保留了更改吗?

3 个答案:

答案 0 :(得分:6)

无聊+样板+多语言= SWIG。

http://www.swig.org/Doc1.3/Lua.html#Lua_nn13

答案 1 :(得分:1)

您还可以创建一个Lua表,该表反映了相同的数据结构,用于在C和Lua之间传递信息。

答案 2 :(得分:0)

您可以使用userdata并在其中添加outdata *。您可以在它们上设置自定义函数,包括metatable。我不打算通过它,因为它是太多的样板/胶水代码。基本上,你在堆上创建outdata,你使light userdata指向它(通过一个令人难以置信的邪恶演员),然后你设置一个自定义metatable并使用__index来使用自定义函数进行数据访问。

基本上,这是可行的但是很无聊。同样危险,因为Lua不理解任何C(或C ++)类型,并且你一直在处理void *。