如果您正在寻找速度,我肯定会投票给Cython。就我所知,与Python集成C++的其他方式相比,Cython在维护/更新方面不那么繁重,关于“工作流程的流畅性”方面也是如此。(Cython化的代码声称与纯C一样快,或者离那也不远,这也使它非常有趣)。
无论如何,有几个很好的API可以将Python代码与C++连接起来(Boost.Python等),但我认为所有这些都将导致需要直接在C++源代码中公开方法(如果我错误或不准确,请告诉我)。
另一方面,Cython将为您提供保持C++ API(GUI或其他内容)严格分离于暴露源(所谓的.pyx扩展名)的可能性。最终的工作流程将是:
C++ API => 编译为共享对象 => Cython扩展(导入和公开C++功能)=> 扩展的编译 => 使用扩展(将扩展添加到您的Python路径)。
好消息是,您只需要维护与正在发展的 C++ 特性相关的 .pyx 文件的变化部分。这在一开始可能需要一些投入,但根据我的经验,一旦设置了这种工作流程,就很容易使整个复杂度增加。
现在关于您需要扩展具有虚函数并从 Python 中覆盖它们的类(如果我理解正确)。这是可行的。再说一遍,不太直接,但您应该查看这个 thread。
坏消息:在这种特殊情况下,您将不得不创建一些额外的 C++ 适配器/接口,以便在扩展的 python 方法没有覆盖给定的父方法时调用父方法。(请注意,重新定义一个从 python 重写的 C++ 公开方法,无论是否为虚函数,都是对函数的替换,但绝对不等同于覆盖)。
嗯,现在我自己再读一遍,看起来有点混乱。希望这仍然有帮助。
如果您选择使用Cython选项,我可以更详细地介绍您将要处理的工作流程,但如果您请求,我认为上面链接的主题已经是一个很好的起点...