博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用Boost::Python实现C++调用python接口
阅读量:6282 次
发布时间:2019-06-22

本文共 1534 字,大约阅读时间需要 5 分钟。

  hot3.png

Boost.Python能将C++的结构体暴露给Python使用。但是在运用Boost.Python时,却遇到一个难题, 

1、在C++定义一个新的结构体struct A 
2、将此结构体暴露给Python解释器 
3、如今在工程中生成结构体A的对象,A a。 
4、希望将a传入Python解释器进行运算,运算的函数写在某py文件中。 
一直没有办法解决,希望大虾帮助解答。

这个问题就是在c++中调用py实现的接口函数。

类似c++代码
   struct a
   {
     int a ;
     int b;
   };
   a temp;
   GetPythonFunc( & temp ); //调用python函数,参数为一定结构体的引用.
这个结构体用boost可以导出给python. 但是这个参数要怎么传递给python代码呢?

最后在python mailist找到答案

--------------------------------------------------
#include <boost/python.hpp>
#include <iostream>
using namespace boost::python;
class World
{
public:
      void set(std::string msg) { this->msg = msg; }
      std::string greet() { return msg; }
      std::string msg;
};
typedef boost::shared_ptr< World > world_ptr;
BOOST_PYTHON_MODULE(hello)
{
      class_<World>("World")
          .def("greet", &World::greet)
          .def("set", &World::set)
      ;
      register_ptr_to_python<world_ptr>();
}
int main(int argc, char *argv[])
{
Py_Initialize();
world_ptr worldObjectPtr (new World);
worldObjectPtr->set("Hello from C++!");
try {
inithello();
PyRun_SimpleString("import hello");
object module(handle<>(borrowed(PyImport_AddModule("__main__"))));
object dictionary = module.attr("__dict__");
dictionary["pyWorldObjectPtr"] = worldObjectPtr;
PyRun_SimpleString("pyWorldObjectPtr.set('Hello from Python!')");
} catch (error_already_set) {
PyErr_Print();
}
std::cout << "worldObjectPtr->greet(): " << worldObjectPtr->greet() << 
std::endl;
Py_Finalize();
return 0;
}
--------------------------------------------------
Output:
worldObjectPtr->greet(): Hello from Python!

转载于:https://my.oschina.net/qihh/blog/88091

你可能感兴趣的文章
实操分享:看看小白我如何第一次搭建阿里云windows服务器(Tomcat+Mysql)
查看>>
Sphinx 配置文件说明
查看>>
数据结构实践——顺序表应用
查看>>
python2.7 之centos7 安装 pip, Scrapy
查看>>
机智云开源框架初始化顺序
查看>>
Spark修炼之道(进阶篇)——Spark入门到精通:第五节 Spark编程模型(二)
查看>>
一线架构师实践指南:云时代下双活零切换的七大关键点
查看>>
ART世界探险(19) - 优化编译器的编译流程
查看>>
玩转Edas应用部署
查看>>
music-音符与常用记号
查看>>
sql操作命令
查看>>
zip 数据压缩
查看>>
Python爬虫学习系列教程
查看>>
【数据库优化专题】MySQL视图优化(二)
查看>>
【转载】每个程序员都应该学习使用Python或Ruby
查看>>
PHP高级编程之守护进程,实现优雅重启
查看>>
PHP字符编码转换类3
查看>>
rsync同步服务配置手记
查看>>
http缓存知识
查看>>
Go 时间交并集小工具
查看>>