< >我知道只有两个项目有C++的自动绑定生成器。第一个是SWIG。正如另一个答案所说,这是一个有点旧的风格,但它的工作。第二个是Boost.Python,它本身并不自动生成绑定,但是您可以使用<a href="http://www.boost.org/doc/libs/1_54_0/libs/python/pyste/doc/introduction.html" rel="nofollow noreferrer">Boost.Pyste</a>为自己生成绑定。它需要GCC-XML来解析原始源代码并编写Boost.Python绑定。两个选项都支持C++中的虚拟方法,这些方法可以从Python重载。</p>
<P>我说,我必须补充,通常,当你有约束力时,你不会盲目地把C++中的所有东西都绑定到Python中。如果你这样做,你不会从Python的侧面得到一个非常的python感。相反,您设计了希望库以Python最可能的方式使用的库,然后返回并查看如何使用可能的绑定库之一将其插入到C++代码中。例如,与其处理<code>std::vector</code>,不如让库调用处理Python列表或iterable。如果C++库接收到一个^ {CD2}},那么您希望用Python字典处理。如果是数组,那么<code>numpy.ndarray</code>可能更方便。等等。。。</p>
<p>也就是说,您仍然可以设计绑定,以便将维护最小化。</p>
<P>这是一个其他Python/C++包的列表,如果您决定进一步查看:</P>
<ol>
<li><a href="http://www.swig.org/" rel="nofollow noreferrer">SWIG</a>-你已经知道了</li>
<li><a href="http://www.boost.org/doc/libs/release/libs/python/" rel="nofollow noreferrer">Boost.Python</a>-这是我们通常在这里使用的-结构非常好</li>
<li><a href="http://cython.org" rel="nofollow noreferrer">Cython</a>-非常简洁的语法接近Python-它们声称比Boost.Python快得多</li>
<li><a href="http://www.riverbankcomputing.com/software/sip/intro" rel="nofollow noreferrer">SIP</a>-不是很广,但在那里</li>
<L> <a href="https://github.com/wjakob/pybind11" rel="nofollow noreferrer">pybind11</a>-类似于Boosi.python的语法,紧凑的实现得益于C++ 11。</li>
</ol>
<p>它们现在处于非活动状态:</p>
<ol>
<li><a href="https://code.google.com/p/pybindgen/" rel="nofollow noreferrer">PyBindGen</a>-声称是自2017年5月21日(2014年上一版本)以来最快的,但<strong>非活动的</strong>版本-目前在github上维护(<a href="https://github.com/gjcarneiro/pybindgen/releases" rel="nofollow noreferrer">https://github.com/gjcarneiro/pybindgen/releases</a>)</li>
<li><a href="http://sourceforge.net/projects/ecspython/" rel="nofollow noreferrer">ECS:Python</a>-<strong>自2014年12月6日(v2.8)起不活动</strong>,移动到github(<a href="https://github.com/MarcusTomlinson/ECS-Python" rel="nofollow noreferrer">https://github.com/MarcusTomlinson/ECS-Python</a>)</li>
<L> {A11}-C++设施,使编写Python扩展变得更容易——<EM>不活动?</em>上一版本是2017年4月23日的v7.0.2</li>
<L> <a href="https://github.com/google/clif" rel="nofollow noreferrer">CLIF</a> -克里夫为创建各种语言的C++包装生成器提供了共同基础——<EM>不活动?</em>回购活动不多(只有14次提交)</li>
</ol>
<p>为了完整起见,也可以将编译后的C代码直接加载到Python中,而不必创建正式的绑定。您可以使用<a href="http://en.wikipedia.org/wiki/Foreign_function_interface" rel="nofollow noreferrer">FFI</a>来完成此操作
对于这两个Python模块中的任何一个:</p>
<ol>
<li><a href="https://docs.python.org/2/library/ctypes.html" rel="nofollow noreferrer">ctypes</a>-这是Python自带的,不需要外部模块安装。</li>
<li><a href="https://pypi.python.org/pypi/cffi" rel="nofollow noreferrer">cffi</a>-这是一个新的包,灵感来自Lua JIT上的等效设计。</li>
</ol>