Boost-python封装Cpp代码供Python调用
2018-01-13 18:18
344 查看
好久没有写博客了,今天把自己有道云笔记上东西分享给大家。Boost::python的使用可以参考我的一篇博客,这里只列举几个简单的例子,对该篇博客的补充。
注意:
BOOST_PYTHON_MODULE(***)中的***必须和工程项目名称相同。
args参数,是C++函数的形参名映射到python函数的形参名,也就是说C++函数HelloWorld(string out,string put)最终映射到python中是hello(x,y)
注意:
在封装类的时候一定要加上头文件
对于默认的构造函数,如果没有参数则使用
我们也可以直接封装类的成员变量,但是要注意成员变量必须是公有的,我们可以通过指定访问限制,来保护成员变量:
C++函数如果有参数,我们在封装的时候不必指定,只写函数名即可。
返回值如果不是特殊值也不需要特殊指明。
封装一个单一的函数
#include<iostream> #include<boost/python/def.hpp> #include<boost/python/module.hpp> #include<boost/python/args.hpp> #include<pyconfig.h> using namespace boost::python; using namespace std; void HelloWorld(){ cout << "HelloWorld!" << endl; } BOOST_PYTHON_MODULE(CToPython){ def("hello", HelloWorld, "Print HelloWorld!"); }
带参数的单一函数
void HelloWorld(string out,string put){ cout << out+put << endl; } BOOST_PYTHON_MODULE(CToPython){ def("hello", HelloWorld,args("x","y"), "Print HelloWorld!"); }
注意:
BOOST_PYTHON_MODULE(***)中的***必须和工程项目名称相同。
args参数,是C++函数的形参名映射到python函数的形参名,也就是说C++函数HelloWorld(string out,string put)最终映射到python中是hello(x,y)
封装一个类
#include<iostream> #include<boost/python/def.hpp> #include<boost/python/module.hpp> #include<boost/python/args.hpp> #include<boost/python/class.hpp> #include<pyconfig.h> using namespace boost::python; using namespace std; class helloworld{ public: string name; string talk; public: helloworld(){ name = "hua"; talk = "HelloWorld!"; } helloworld(string n, string t){ name = n; talk = t; } void set_name(string n){ name = n; } void set_talk(string t){ talk = t; } string get_name(){ return name; } string get_talk(){ return talk; } }; BOOST_PYTHON_MODULE(CToPython){ class_<helloworld>("helloworld", init<>()) .def(init<string,string>()) .def_readonly("name", &helloworld::name) //.def_readwrite("name",&helloworld::name) .def_readwrite("talk", &helloworld::talk) .def("set_name",&helloworld::set_name) .def("set_talk",&helloworld::set_talk) .def("get_name",&helloworld::get_name) .def("get_talk",&helloworld::get_talk) ; }
注意:
在封装类的时候一定要加上头文件
#include<boost/python/class.hpp>;
对于默认的构造函数,如果没有参数则使用
int<>();如果有参数
init<string,string>()只说明参数类型即可;
我们也可以直接封装类的成员变量,但是要注意成员变量必须是公有的,我们可以通过指定访问限制,来保护成员变量:
def_readonly()只能读不能写,
def_readwrite()可读可写;
C++函数如果有参数,我们在封装的时候不必指定,只写函数名即可。
返回值如果不是特殊值也不需要特殊指明。
相关文章推荐
- 【转】利用Boost.Python将C++代码封装为Python模块
- Python调用采用Boost Python封装的c++
- 利用Boost.Python将C++代码封装为Python模块
- 利用Boost.Python将C++代码封装为Python模块
- Python调用采用Boost Python封装的c++(2)
- 用boost封装C++的库供Python调用
- 如何在C++代码中调用python代码(MinGW+Boost.Python)
- python调用C和C++代码(BOOST)
- Python调用采用Boost Python封装的c++(2)
- 如何在C++代码中调用python代码(MinGW+Boost.Python)
- 查看python调用c++代码的代码实现位于那个cpp文件
- 利用boost.python封装C++函数供python调用
- 通过SWIG封装C/C++代码被Python调用
- XGBoost中参数调优的完整指南(含Python-3.X代码)
- 在C#代码中应用Log4Net(五)将Log4Net正确地封装在自己的类库中并进行调用
- Delphi使用android的NDK是通过JNI接口,封装好了,不用自己写本地代码,直接调用
- python数据库函数的封装调用
- python调用 C/C++ 代码示例
- Boost.Python 学习笔记 No.1——python调用c函数
- matlab调用python代码