Python调用采用Boost Python封装的c++

上次我写了利用Python提供的API封装c函数,并调用。但是由于利用API的方式过于原始,对于类或者结构极度麻烦。因此,我选择了BoostPython的来封装类,类似的工具还有SWIG等,选择Boost的原因是它不需要引入其他的接口描述语言,封装也是c++代码;另外,它支持的c++特性比较全。

    Boost Python的文档,我推荐:http://www.maycode.com/boostdoc/boost-doc/libs/python/doc/。基本上,你遇到的问题,都可以找到答案。

   下面贴一个例子,这个例子覆盖的面很全,需要好好理解。这个例子,是研究怎么封装C++。下一节,我会写一些高级的用法。

#include <boost/python.hpp>
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
#include <boost/python/to_python_converter.hpp>
#include
using namespace std;
using namespace boost::python;
namespace HelloPython{
  // 简单函数
  char const* sayHello(){
    return "Hello from boost::python";
  }
  // 简单类
  class HelloClass{
  public:
    HelloClass(const string& name):name(name){
    }
  public:
    string sayHello(){
      return "Hello from HelloClass by : " + name;
    }
  private:
    string name;
  };
  // 接受该类的简单函数
  string sayHelloClass(HelloClass& hello){
    return hello.sayHello() + " in function sayHelloClass";
  }
  //STL容器
  typedef vector<int> ivector;
  //有默认参数值的函数
  void showPerson(string name,int age=30,string nationality="China"){
    cout << name << " " << age << " " << nationality << endl;
  }
  // 封装带有默认参数值的函数
  BOOST_PYTHON_FUNCTION_OVERLOADS(showPerson_overloads,showPerson,1,3) //1:最少参数个数,3最大参数个数
  // 封装模块
  BOOST_PYTHON_MODULE(HelloPython){
    // 封装简单函数
    def("sayHello",sayHello);
    // 封装简单类,并定义__init__函数
    class_("HelloClass",init())
      .def("sayHello",&HelloClass::sayHello)//Add a regular member function
      ;
    def("sayHelloClass",sayHelloClass); // sayHelloClass can be made a member of module!!!
    // STL的简单封装方法
    class_("ivector")
      .def(vector_indexing_suite());
    class_ >("ivector_vector")
      .def(vector_indexing_suite >());
    // 带有默认参数值的封装方法
    def("showPerson",showPerson,showPerson_overloads());
  }


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值