1

SWIG_NewPointerObj を使用して C++ オブジェクトを Python に渡すことはできますが、それPyObject* ではないため、Python で正しく使用できません。

私の質問は: Python から作成された C++ オブジェクトPyObject* を C++ で取得する方法はありますか?

4

1 に答える 1

0

PyObjectC++ オブジェクトごとに固有のものはありません。たとえば、次をラップする場合:

struct foo {};

struct foo *test() {
  static struct foo inst;
  return &inst;
}

test()内部 Pythonへのすべての呼び出しは new を返しPyObjectます。SWIG には、それらが同一であることを簡単に知る方法がありません。

返される はシン ラッパーです。PyObjectつまり、ローカル状態を持たない C++ オブジェクトのプロキシです。Python の観点から見ると、これらはすべて同じオブジェクトのように見え、同じように動作します。これは、すべてを C++ オブジェクトに委譲するためです。

を取得したい場合は これを行う方法がありますが、一般的には、そのオブジェクトに加えた変更は、同じ C++ オブジェクトを参照していてもPyObject、他の からは見えないため、お勧めできません。PyObject

于 2012-04-29T09:42:40.667 に答える