【问题标题】:Instantiating shared_ptr's in boost::python在 boost::python 中实例化 shared_ptr
【发布时间】:2011-05-08 02:41:54
【问题描述】:

我有一个关于 boost python 的问题。我一直在努力将项目的一些功能导出到 boost python 中,但我还没有找到解决以下问题的方法: 我有一组在整个游戏中存储和使用的 StatusEffect 对象。在游戏启动时,我希望能够调用一个 python 脚本来填充/添加到状态效果对象集。我在将 StatusEffect 类及其派生类暴露给 python 并调用脚本时没有问题。

问题是我将 StatusEffect 对象存储在 std::vector<boost::shared_ptr<StatusEffect> > Effects; 我不知道如何创建boost::shared_ptr<StatusEffect> 的新实例,除了这里描述的添加静态创建方法的方法http://wiki.python.org/moin/boost.python/PointersAndSmartPointers 鉴于我拥有大量的构造函数和各种各样的派生类,这似乎是一个不理想的解决方案最好。我希望能够直接使用 StatusEffect 对象的构造函数创建 boost::shared_ptr 的实例,并能够将它们添加到向量中。这可能吗?

回答或一些有用的建议会很有帮助。我昨天问了一个类似的问题,但不幸的是它没有太大帮助。

提前致谢

【问题讨论】:

    标签: c++ boost-python


    【解决方案1】:

    希望我能理解您的问题。如果您使用shared_ptr 声明您的python 类,如http://wiki.python.org/moin/boost.python/PointersAndSmartPointers 所示,那么boost::python 将自动将您在python 中创建的StatusEffect 对象转换为shared_ptr<StatusEffect>(如果需要)(您可以试试这个,例如.def-生成一个以const shared_ptr<StatusEffect>&shared_ptr<StatusEffect> 作为参数的函数,并使用在python 中创建的StatusEffect 实例调用它。

    如果你想分配一个vector<shared_ptr<StatusEffect> > 类型的属性,你必须为它创建转换器(从 python 序列,然后返回),这在文档中有描述。例如,请参阅c++ to python 转换器模板(第 120 行)、python 到 c++ 模板(第 127 行),然后将其用于序列中包含的各种类型(包括 shared_ptr's)(第 212 行)。

    然后你可以写yourObject.listOfStatusEffects=[StatusEffect(),StatusEffect(),StatusEffect()]之类的东西

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      相关资源
      最近更新 更多