2010-03-17 67 views
3

考慮是這樣的:通在加速參考:: Python的

struct Parameter 
{ 
    int a; 
    Parameter(){a = 0;} 
    void setA(int newA){a = newA;} 
}; 
struct MyClass 
{ 
    void changeParameter(Parameter &p){ p.setA(-1);} 
}; 

好吧,讓我們快進和想象我已經做完這些類,揭露一切蟒蛇,和想象也是我實例參數的對象在C++代碼,這是我傳遞給python腳本,以及Python腳本使用MyClass的對象修改我在C++代碼開始時創建參數的實例。

該代碼執行後,在C++ Parameter實例是不變!!!這意味着它通過價值傳遞(或類似的東西:S),而不是通過引用。但我認爲,我宣佈它通過引用傳遞...

我似乎無法找到有關通過引用傳遞的boost :: Python文檔(雖然似乎是有關參考返回足夠的文檔......) 。任何人都可以提供一些提示或指針嗎?

+2

在您的構造函數中爲Parameter添加分號後,此測試代碼對我來說工作正常:http://www.pastie.org/873263 – 2010-03-17 03:41:22

+1

@Goose,問題是關於從Python使用此代碼,而不是從C++使用。 – 2010-03-17 17:50:23

+0

@Barry mhm。這只是一個很快成型的例子。 – Fabzter 2010-03-18 04:01:36

回答

1

Python沒有引用,所以當你通過引用python boost::python調用copy-ctor你的對象。

在這種情況下,您有兩種選擇:用指針(或智能指針)替換引用將您自己的'智能引用'對象/包裝器傳遞給python。

+0

在我的項目,我通過創建不復制拷貝構造函數數據,但共享一個指向數據的智能向量解決同樣的問題。 – W55tKQbuRu28Q4xv 2010-03-20 14:53:38

+0

謝謝!我幫忙,但我認爲python管理一切與參考? – Fabzter 2010-03-21 00:58:01

+0

可能是我很喜歡的C++指針,而不是引用錯誤的,但蟒蛇引用。 – W55tKQbuRu28Q4xv 2010-03-21 07:43:36