在boost :: python中实例化shared_ptr

时间:2011-05-08 02:41:55

标签: c++ boost-python

我有一个关于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的实例,并能够将这些实例添加到向量中。这可能吗?

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

提前致谢

1 个答案:

答案 0 :(得分:2)

我希望我理解你的问题。如果你使用http://wiki.python.org/moin/boost.python/PointersAndSmartPointers所示的shared_ptr声明你的python类,那么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)(第212行)。

然后你可以写一些像yourObject.listOfStatusEffects=[StatusEffect(),StatusEffect(),StatusEffect()]

这样的东西