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

    技术2022-05-20  50

    本章描述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.csdn.net/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()   

     

     


    最新回复(0)