2016-11-22 42 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(); 
} 

我不得不SomeClass的實例傳遞到擴展實例方法。謝謝。

+2

Give [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

有這樣做的幾種方法(講故事的人正確地指出的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它是'PySomeClass'的一個(Cython)成員,可以像普通的Python對象那樣傳遞。其他Python代碼可以調用'PySomeClass'的成員,其成員可以調用C++對象的方法。 –