Boost.Python使用笔记
前言
在使用C/C++写Python扩展程序时, 无疑Boost.Python模块是一个很好用的工具
入门
Boost.Python实现C++扩展
boost::python::object func(const std::string& name, const boost::python::dict& args)
{
return boost::python::make_tuple(name, args);
}
class Main {
public:
Main() {
}
void start(int tag) {
/*...*/}
void stop(const std::string& reason) {
/*...*/}
};
BOOST_PYTHON_MODULE(ojbk)
{
def("func", func);
class_<Main>("Main", init<>())
.def("start", &Main::start)
.def("stop", &Main::stop);
}
Python调用
In [1] import ojbk
In [2] tp = ojbk.func("SB", {
"age": 20, "number": 250})
In [3] tp
Out[3] ('SB', {
'age': 20, 'number': 250})
In [4] main = ojbk.Main()
In [5] main.start(0)
In [6] main.stop('unknonw')
类型转换
- Boost.Python与Python类型对应关系
Boost.Python类型 | Python类型 |
---|---|
int, long | int |
float, double | float |
std::string, boost::python::str | str |
boost::python::list | list |
boost::python::dict | dict |
boost::python::object | object |
- Boost.Python类型与基本类型转换
from | to | trans |
---|---|---|
int | boost::python::object | boost::python::object(val) |
double, float | boost::python::object | boost |