如何将带有POD数据的std :: vector从C ++传递给Lua?

时间:2016-04-18 09:36:51

标签: c++ binding lua stdvector

我是Lua和C ++的新手 - Lua绑定,目前我有一些奇怪的问题。这有效:

  • 我可以传递std::vector自定义,复杂,类型并在Lua中获取它的大小
  • 我可以访问Lua中上面std::vector的任何元素并在其上执行一个方法

也:

  • 我可以传递std::vector的POD类型(例如int)并在Lua中获取它的大小(std::vector的大小)

但是我无法从向量中获得int,整个应用程序在尝试时都会崩溃。

具有讽刺意味的是,std::vector的所有绑定都是通过相同的辅助函数进行的(这里有2个示例函数):

template < typename T_ >
void BindVectorOf( luabind::class_< std::vector< T_ > > & vectorClass )
{
    typedef std::vector< T_ > Vector;
    typedef Vector::reference ( Vector::* AtMethod )( Vector::size_type );

    vectorClass
            .def( luabind::constructor< >( ) )
            .def( "Size",     &Vector::size )
            .def( "At",       (AtMethod)&Vector::at )
        );
}

因此,总之,Size方法始终有效,但At方法仅适用于复杂(自定义)类型,例如,它不适用于int

Lua是否有针对POD类型的内容? :-)我缺少什么?

更新1:为了安全起见,我尝试绑定然后强制int32_t在第一次访问std::vector元素时使int为32位,没有区别崩溃。

更新2:为了确保某些类型强制不起作用,我删除std::vector<int>的绑定离开float,然后我通过了std::vector<float>。与之前的结果相同。

更新3:出于好奇,我尝试使用索引运算符访问元素,即Lua中的my_vector[x]。没有崩溃,但结果我得到了nil(我需要元素,即使是+1班次)。

解决方案:我用这种方式解决了问题 - 对于POD类型,我没有返回对值的引用(如上所述),而是返回值本身。但我很想知道为什么Lua有参考问题。

0 个答案:

没有答案