我是Lua和C ++的新手 - Lua绑定,目前我有一些奇怪的问题。这有效:
std::vector
自定义,复杂,类型并在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有参考问题。