2011-05-08 16 views
0

我有一个关于boost python的问题。我一直在努力将项目的一些功能导出到boost python中,并且我还没有找到解决以下问题的方法: 我有一组StatusEffect对象,我在整个游戏中存储和使用该对象。在游戏启动时,我希望能够调用一个将填充/添加到状态效果对象集合的python脚本。我没有公开StatusEffect类的问题,它的派生类是python并调用了脚本。在boost中实例化shared_ptr's :: 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的实例,并且能够将这些实例添加到该向量中。这可能吗?

答案或一些有用的建议将会有所帮助。我昨天问了一个simialr问题,但不幸的是这并没有太大的帮助。

在此先感谢

回答

2

我希望我能理解你的问题。如果你声明与shared_ptr你的Python类如http://wiki.python.org/moin/boost.python/PointersAndSmartPointers所示,然后boost::python会自动转换你在Python创造shared_ptr<StatusEffect>StatusEffect对象(如有必要,你可以通过.def试试这个如-ing一个函数,它接受const shared_ptr<StatusEffect>&shared_ptr<StatusEffect>作为参数,并在Python中创建StatusEffect实例调用它。

如果你要分配vector<shared_ptr<StatusEffect> >类型的属性,你必须为它创造转换器(从蟒蛇序列,和背面),这是在文档中描述的。举个例子,看看c++ to python转换器模板(第120行),python转换为C++模板(第127行),然后将它用于包含在序列中的各种类型(包括shared_ptr's) (第212行)。

然后你可以写点类似yourObject.listOfStatusEffects=[StatusEffect(),StatusEffect(),StatusEffect()]