使用pybind11开发python扩展库
Posted caimouse
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用pybind11开发python扩展库相关的知识,希望对你有一定的参考价值。
面向对象的类和结构怎么样导出?
由于类和结构都属于自定义类型,要想导出这样的类型给python使用,必须使用另外一种方式,就是创建与python里一样的类结构。
下面通过一个结构定义为Pet的例子来说明:
struct Pet {
Pet(const std::wstring &name) : name(name) { }
void setName(const std::wstring &name_) { name = name_; }
const std::wstring &getName() const { return name; }
std::wstring name;
};
上面的例子定义了一个宠物结构,也可以称为类。第一个是构造函数,后面是对名称的设置和获取。成员变量只有一个字符串name保存。
要想把结构Pet导出在python里使用,就需要使用下面的定义:
//结构或类的导出
py::class_<Pet>(m, "Pet")
.def(py::init<const std::wstring &>())
.def("setName", &Pet::setName)
.def("getName", &Pet::getName);
在这里使用py::class_来绑定类或结构的类型,使用init函数来转换构造函数。通过这样处理的类或结构,就可以在python里使用了,使用下面的代码来演示:
#演示结构和类
p = TestAdd.Pet(\'小狗\')
print(p)
以上是关于使用pybind11开发python扩展库的主要内容,如果未能解决你的问题,请参考以下文章