利用Boost::Python实现C++调用python接口

本文介绍如何通过Boost.Python库将C++中的结构体暴露给Python,并实现了跨语言的数据传递与操作。通过示例代码展示了具体的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值