我有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实例方法。三江源。
答案 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()
。
上面的链接应该解释如何构建所有文件。