3

次のようなものを検討してください。

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

さて、早送りしましょう。すでにこれらのクラスをラップして、すべてを Python に公開していると想像してください。また、C++ コードで Parameter のオブジェクトをインスタンス化し、それを Python スクリプトに渡し、その Python スクリプトが MyClass オブジェクトを使用してC++ コードの最初に作成した Parameter のインスタンスを変更します。

そのコードが実行された後、C++ の Parameter インスタンスは変更されません!!! これは、参照ではなく、値 (または同様のもの:S) で渡されたことを意味します。しかし、私はそれを参照渡しと宣言したと思っていました...

参照渡しに関する Boost::Python のドキュメントが見つからないようです (ただし、参照渡しに関する十分なドキュメントがあるようです...)。誰かヒントやポインタを教えてください。

4

1 に答える 1

1

Python には参照がないため、オブジェクトのPythonboost::python呼び出しへの参照を渡す場合。copy-ctor

この場合、2 つの選択肢があります。参照をポインター (またはスマート ポインター) に置き換えるか独自の「スマート参照」オブジェクト/ラッパーを Python に渡します。

于 2010-03-20T14:51:59.603 に答える