2011-05-08 42 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()]