c++ python交互之boost.python 简集之类(class , struct)

本文介绍了如何使用Boost.Python库将C++的类和结构体暴露给Python,通过示例展示了如何定义C++的struct A、B、C、D、E、F,并在Python中进行调用和操作,包括构造函数、方法的绑定和使用。

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

本章描述c++类,如何被python识别和使用

c++代码:src.cpp

 

#include <iostream>
#include <string>
using namespace std;

/**********************************************struct and class ***********************************/
struct A
{
    void greet()
    {
        cout << "just a test! from A" << endl;
    }

};

struct B
{
    B(string msg): msg(msg) {}

    void set(string msg)
    {
        this->msg = msg;
    }

    void greet()
    {
        cout << msg << endl;
    }

    string msg;
};

class C
{
public:
    void greet()
    {
        cout << "just a test! from C" << endl;
    }

};

 

pyhton转换代码 :src4py.cpp

#include <boost/python.hpp>
#include "src.cpp"
using namespace boost::python;
BOOST_PYTHON_MODULE(test)
{
    class_<A>("A")
        .def("greet", &A::greet)
    ;

    class_<B>("B",init<string>())   //注意构造函数的写法
        .def("greet", &B::greet)
        .def("set", &B::set)
    ;

    class_<C>("C")
        .def("greet", &C::greet)
    ;
   
    //Constructors overload
    class_<D>("D",init<string,int>())
        .def(init<string>())
        .def("printstr",&D::printstr)
        .def("printint",&D::printint)
    ;

    //if we do not wish to expose any constructors in E at all
    class_<E>("E",no_init)
        .def("printstr",&E::printstr)
    ;
    class_<F>("F")
        .def("initE",&F::initE)
        .def("printEstr",&F::printEstr)
    ;
}

编译成so过程省略,如果要看makefile文件,请参照第一篇文章

http://blog.youkuaiyun.com/linkyou/archive/2011/04/14/6323940.aspx

 

python中调用代码 test.py

import test

obj = test.A()  //对应c++的struct A
obj.greet()      //structA中的方法greet

obj = test.B("just a test! from B") //对应c++的struct B,且含构造函数
obj.greet()
obj.set("test again! from B")
obj.greet()

obj = test.C()
obj.greet()

obj = test.D("just a test!",1)
obj.printstr()
obj.printint()

#if we do not wish to expose any constructors in E at all
obj = test.F()
e = obj.initE("just a test!")
e.printstr()
obj.printEstr()   

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值