2011-02-11 99 views
5

语境:Python嵌入到C++应用程序

我们一直面临着持续存在的问题是单元测试我们的市场数据的应用程序。这些应用程序坐下来观察从Feed中检索的数据并执行某些操作。一些很难触发的关键事件很少发生,测试人员很难验证我们的应用程序在所有情况下都能正确执行,因此我们必须依靠单元测试。

这些系统通常通过在发生事件时发出回调(进入我们的应用程序),然后我们的任务来解决这个问题。

解决方案我设想:

是否有可能把Python,或延长(不是100%明确这一点),使测试人员能够火起来一个Python REPL和问题的函数调用是类似于回调,然后由我们的C++类处理。运行时对我们的对象进行动态操作的一些形式。

回答

7

我在其中一个项目中使用SWIG为C++代码的相关部分生成python绑定,从而做了类似的操作。然后我像其他人所建议的那样嵌入口译员。完成这些后,我可以随意执行python代码(例如PyRun_SimpleString),它可以访问C++代码。通常我最终会使用像Singleton这样的东西来更容易地从Python中访问特定的C++对象。

另外值得一提的是swig python模块中的directors,它允许更直观地处理虚拟函数。根据你在做什么,你可能会发现这些非常有帮助。

4

你想要做什么是可能的,虽然不是微不足道的正确。这听起来像你想嵌入(而不是扩展)Python。这两个主题都包含在教程here中。

从C++类到Python类的映射有相当多的工作,并且有许多事情会以微妙的方式出错,特别是内存泄漏和多线程(如果您现有的代码是多线程的话) 。但是,如果仅用于测试环境,并且稳定性不是关键任务,那么它可能不是什么问题。