擅长:python、mysql、java
<p>如果你在寻找速度,我肯定也会投给赛顿。据我所知,关于C++与Python接口的其他方法,与其他绑定工具相比,Cython的维护/更新并不那么重,而是关于工作流的“流动性”增益。(Cythonized代码认为其速度与纯C一样快,或者距离纯C不远,这也使得它非常有趣)。</p>
<P>无论如何,有几个好的API连接Python代码和C++(Boost.Python,…),但是我认为所有这些都会导致需要直接在C++源代码中公开方法(你们告诉我,如果我错了,或者不精确)。</p>
<P>另一方面,Cython将为您提供将C++ API(GUI,或任何…)严格地与曝光源(所谓的PYX扩展)隔离的可能性。最后的工作流程是:</p>
< P> C++ +API=&编译;作为共享对象= & gt;Cython扩展(s)(导入和暴露C++特征)= &编译扩展(s)=& gt;使用扩展(扩展到Python路径)。</p>
<P>好消息是,您必须只维护池中的Pyx文件的变化部分,这些文件与正在演化的C++特性(其中需要被曝光的那些)有关。一开始这是一种投资,但是,以我的经验,一旦这个工作流程建立起来,就可以很直接地使整个事情变得复杂起来。</p>
<p>现在考虑到您需要扩展具有virtual的类并从Python重写它们(如果我正确理解了您的意思)。这是可行的。再一次,不是那么直接,但是你应该看看这个<a href="https://stackoverflow.com/questions/10126668/can-i-override-a-c-virtual-function-within-python-with-cython/12700121#12700121">thread</a>。</p>
<P>坏消息:在那个特殊情况下,如果扩展Python没有重写给定的父方法,则必须创建一些额外的C++适配器/接口,以便启用父方法的调用。(注意,从Python重新定义C++暴露方法,无论是虚拟还是非,都是函数的替换,但绝对不等同于重写)。</p>
<p>哼,现在我又在读自己的文章了,看起来有点困惑。希望这还是有帮助的。</p>
<p>如果你选择Cython选项,如果你让我做的话,我可以更具体地说明你必须处理的工作流,但是我认为上面链接的线程是一个很好的起点。。。</p>