Boost.Pythonを使ってPythonにC ++クラスをラップする方法を知っています。 Boost.Pythonを使って便利にラッピングするのは本当に強力です。
しかし、Boost.Pythonがどのように ホールド C ++クラス。
Boost.Pythonのコードは、テンプレートのメタプログラミングファッションやすべてのことだけで書かれているため、読み込みやデバッグが難しい 実行する コンパイル時に私はドキュメントをスキャンし、著者による「Boost Pythonでハイブリッドシステムを構築する」記事を読んだが、答えを見つけられなかった。
だから、Boost.PythonはどのようにC ++クラスを保持していますか?
ラップされたC ++クラスのインスタンスをprivateメンバーとして保持していますか? PyObject
?保持されたインスタンスに委譲することによって、ラップされたクラスのすべての継承、多型などの機能が模倣されますか?
回答:
回答№1は0だから、Boost.PythonはどのようにC ++クラスを保持していますか?
ペタンティックであるためには、C ++では実行時にクラスがなく、クラスのオブジェクトまたはインスタンスのみが存在します。
Boostクラスのラッパーは、値またはスマートポインタを介してC ++オブジェクトを保持します(現在は推奨されていません) std::auto_ptr
サポートされています)。
残念ながら、boost.pythonのドキュメントには欠けているものがありますが、ここでは便利なリンクをいくつか紹介します:
- http://www.boost.org/doc/libs/1_57_0/libs/python/test/select_holder.cpp
- http://www.boost.org/doc/libs/1_57_0/libs/python/test/auto_ptr.cpp
- http://www.boost.org/doc/libs/1_57_0/libs/python/doc/v2/faq.html#ownership