2

C++ のクラスがあります。
C++ コードでこのクラスからオブジェクトを作成します。このオブジェクトに Python でアクセスできるようにします。boost::shared_ptrオブジェクトアドレスを保持するために使用します。

これに関するいくつかの投稿をチェックしましたが、あまり役に立ちませんでした。インタープリターの初期化後に Python 名前空間でオブジェクトを作成し、Python で作成したオブジェクトにブースト shared_ptr を割り当てるのが最善の方法だと思います。

BOOST_PYTHON_MODULEcpp を使用してクラスをラップnamespace["my_module_name_in_python"] = class<"my_class">...し、Python でオブジェクトを作成してshared_ptr.

要約すると、私の質問は、に含まれる C++ オブジェクトshared_ptrを Python に渡す方法です。

前もって感謝します

4

1 に答える 1

1

これは、boost python の公式ドキュメントから取得したものです。

次のような C++ クラスがあるとします。

class Vec2 {
public:
    Vec2(double, double);
    double length();
    double angle();
};

そのための Python インターフェイスを次のように派生させることができます。

object py_vec2 = class_<Vec2>("Vec2", init<double, double>())
    .def_readonly("length", &Point::length)
    .def_readonly("angle", &Point::angle)
)

クラス定義は変数に保存されますpy_vec2。これで、上記のクラスのインスタンスを次のように作成できます。

object vec_instance = py_vec2(3.0, 4.0);

このインスタンスを Python インタープリターに注入できるようになりました。たとえば、"__main__"モジュールの変数に設定します。

object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");

main_namespace["vec_instance"] = vec_instance;
于 2013-09-18T14:10:33.037 に答える