2016-11-22 40 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++对象的方法。 –