如何使用Luabind绑定原始指针

我正在尝试使用luabind来绑定box2d,以便我可以在我的Lua脚本中使用它。我遇到了一个问题,无法似乎用luabind绑定原始指针。以下是我的代码:

每次我尝试使用'anchorFixDef.shape = anchorShape'将形状分配给我的fixtureDef时,lua都会抛出一个错误:

如何绑定类似“const b2Shape *形状;”的内容在luaBind中,因为类似“.def_readwrite(“shape”,&b2FixtureDef ::shape)”会给我带来问题。我在文档中看到过一些使用class_ binding语句中的智能指针的代码,但这并没有解决问题。

谢谢。

点赞
用户988143
用户988143

通过将 &shape 公开为可设置的参数,您试图将一个地址(anchorShape,因为它就是)分配给一个对象(shape)。语法中的 &shape 部分可能让您认为您可以修改 shape 成员的地址,但是这是不可能的。因为在地址 &shape 处,您应该写入类型为 shape 的整个对象,而在 lua 中的 anchorFixDef.shape = anchorShape 语句仅执行一个指针赋值。这就是为什么 luabind 会出现问题的原因。

你有两个选择:

  1. 为形状字段提供一个 Lua 中的 setter,例如:

    luabind::class_<b2FixtureDef>("b2FixtureDef")
        .property("shape", &b2FixtureDef::GetShape, b2FixtureDef::SetShape)
        .def_readwrite("friction", &b2FixtureDef::friction)
     //assuming friction is a basic type and so on
    
  2. 在 b2Fixture 中将 shape 设为指针。

前者更可取,因为它避免了与指针内存管理相关的所有复杂性,并且是一种美好的封装类成员的方式。

def_readwrite 可能适用于其他成员的原因可能是它们具有简单的基本类型(我假设类似于 float 或 int),这些类型在 Lua 中有等效类型。

2014-12-05 17:29:35