使用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扩展库的主要内容,如果未能解决你的问题,请参考以下文章

使用pybind11开发python扩展库

使用pybind11开发python扩展库

使用pybind11来快速开发python程序扩展库

使用pybind11开发python扩展库

使用pybind11开发python扩展库

使用pybind11开发python扩展库