在c ++ app

时间:2015-07-18 07:22:50

标签: c++ boost-python

我需要使用python脚本扩展我的c ++应用程序,但我不确定应该使用哪个接口库。基本的通信是:c ++ app向脚本注册一些类方法(以便它们可以作为模块加载到脚本中),然后调用python脚本中的特定函数。然后,脚本应该在能够调用c ++方法的同时执行其任务。脚本完成后,c ++应用程序应该能够使用脚本的返回值(例如,作为std :: list)。

从我读过的内容来看,boost.python功能非常强大,考虑到我已经使用了boost,这似乎还有很长的路要走。但是在文档中,我还没有看到将方法(静态或非静态)暴露给python脚本的方法。

这可能吗?我怎么能这样做?

修改

好的,我想我应该更具体一点,对不起。我已经知道如何将python库等导入到我的c ++代码中,并且我已经了解了有关嵌入的提升文档,但没有得到我想要的东西。

为清楚起见,这是我的方案中的工作流程:

  1. C ++应用程序开始运行
  2. 在某些时候,C ++类需要来自特定python脚本的支持,该脚本位于硬盘上已定义的插件位置。
  3. 在调用脚本之前,C ++类希望将其一些方法暴露给脚本以进行回调(这次脚本应该只能调用此方法,即脚本完成执行并从另一个地方调用在c ++应用程序中,它不应该再能够调用类方法。而且,我不想将整个类暴露给脚本 - 只有特定的方法和脚本不能创建实例此外,我不希望其他python脚本能够调用暴露的方法,只能调用我打算调用的方法。)
  4. "注册"脚本的类方法,c ++应用程序在脚本中调用所需的函数并获取返回值作为c ++类型(例如std :: list)
  5. 我认为第三点是这里棘手的部分,我不知道如何实现这一目标......

1 个答案:

答案 0 :(得分:0)

  

这可能吗?

当然,是的。

  

我该怎么做?

在最一般意义上,

使用以下命令导入python库:

some text here

使用以下命令访问库对象和子对象及函数:

boost::python::object obj = boost::python::import("module_name");

这应该足以让你前进 - 随着你的进一步发展,细节在the documentation

(实施例:)

obj.attr("name");