C ++和Python紧密集成

时间:2016-11-22 09:00:26

标签: python c++ integration

我有C ++程序,我想用Python添加扩展系统。但要实现这一点,我必须将Python对象方法调用映射到C ++方法调用。这是可能的,如果是,如何实现。

示例
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实例传递给Extension实例方法。三江源。

1 个答案:

答案 0 :(得分:3)

有几种方法可以这样做(StoryTeller正确地记录了Boost :: Python,并且还有Swig。就个人而言,我发现Cython's C++ integration非常容易使用。

创建一些头文件,比如说List<CreditCard> creditCardList = getSessionFactory().getCurrentSession().createCriteria(CreditCard.class, "card").add(Restrictions.eq("card.id", id)).list(); ,并放入其中(以及警卫等):

classes.hpp

以通常的方式将实现放在实现文件中。

现在创建Cython文件,导出您将使用的界面:

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

和Python包装器:

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()

上面的链接应该解释如何构建所有文件。