, (lua_Number)pUData->data[idx]);
return 1;
}
lua中设置和获取值的代码如下:
view sourceprint
arr[1] = 100
print(arr:get(1)) // 没有arr[1]的原因在于元表中的__index属性被用来指向元表本身.
其他函数大同小异. 有意思的是__gc事件.
在lua中的变量都是引用, 当一个对象没有任何变量引用的时候, 就会被lua的gc回收.
在lua中这样写, 就会让代码回收:
view sourceprint
arr = nil
在相应__gc事件的C/C++函数中, 我们就能对刚才申请的内存进行释放:
view sourceprint
int ReleaseArray( lua_State* pState )
{
LuaArray* pUData = (LuaArray*)lua_touserdata(pState, 1);
float* pExData;
memcpy_s((void*)&pExData, sizeof(float*), (void*)pUData->data, sizeof(float));
delete [] pExData;
return 0;
}
userdata+metatable的机制, 让我们能从C/C++的角度为lua提供数据和类型的扩展. 本文中对这套机制的使用方法仅仅是一个简陋的实验方法, 具体项目中可以加入许多改进以应对不同需求.