C++ 和 Python 紧密集成
C++ and Python tight integrating
我有 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 实例方法。谢谢。
有几种方法可以做到这一点(StoryTeller 正确指出 Boost::Python,并且 Swig too). Personally, I find 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 class 一样导入和使用 PySomeClass
。
上面的link应该解释了如何构建所有文件。
我有 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 实例方法。谢谢。
有几种方法可以做到这一点(StoryTeller 正确指出 Boost::Python,并且 Swig too). Personally, I find 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 class 一样导入和使用 PySomeClass
。
上面的link应该解释了如何构建所有文件。