2016-11-22 6 views
3

私はC++プログラムを持っており、Pythonで拡張システムを追加したいと思います。しかしこれを達成するためには、Pythonのオブジェクトメソッド呼び出しをC++のメソッド呼び出しにマップする必要があります。これが可能かどうか、そうであれば達成する方法ですか?C++とPythonの緊密な統合


Pythonの一部:

class Extension(AbstractExtension): 
    def __init__(self, cool_cpp_object): 
     self.o = cool_cpp_object 

    def some_method(self): 
     self.o.method_to_cpp() 

C++部分:

class SomeClass : public AnotherClass 
{ 
public: 
    void method_to_cpp(); 
} 

Iエクステンションインスタンスメソッドに工assインスタンスを通過しなければなりません。ありがとうございました。

+2

[Boost.Python](http://www.boost.org/doc/libs/1_62_0/libs/python/doc/html/tutorial/tutorial/exposing.html#tutorial.exposing.constructors)a go – StoryTeller

答えて

3

これを行うにはいくつかの方法があります(StoryTellerはBoost :: Pythonに正しく書いてあり、Swigもあります)。個人的には、私はCython's C++ integrationが非常に使いやすいことがわかります。

は、いくつかのヘッダファイルを作成します classes.hppを言って、その中に(、警備員と一緒になど)を置く:

class SomeClass : public AnotherClass 
{ 
public: 
    void method_to_cpp(); 
} 

場所を実装ファイルでの実装通常の方法。

は今、あなたが使用するインターフェイスの輸出とCythonファイルを作成します。

cdef extern from "classes.hpp": 
cdef cppclass SomeClass: 
    method_to_cpp() 

とPythonラッパー:基本的には、それだけです

cdef class PySomeClass: 
    cdef SomeClass obj 

    def method(self): 
     self.obj.method_to_cpp() 

。正規のPythonクラスのように、PySomeClassをインポートして使用することができます。

上記のリンクは、すべてのファイルを構築する方法を説明する必要があります。

+0

わかりました。私はリンクをスキミングしました.C++をPythonに統合するのは本当に簡単ですが、まだ作成済みのC++オブジェクトをPythonに渡す方法はまだありませんでした。 – Megaxela

+2

@Megaxela通常のPythonオブジェクトのように渡すことができる 'PySomeClass'の(Cython)メンバーです。他のPythonコードは 'PySomeClass'のメンバーを呼び出すことができ、メンバーはC++オブジェクトのメソッドを呼び出すことができます。 –