使用pybind11开发python扩展库

Posted caimouse

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用pybind11开发python扩展库相关的知识,希望对你有一定的参考价值。

前面学习了继承类的导出,可见完美地完成了这一个工作,如果想掌握一些深入的内容,还是需要继续向前,比如类的多态下是怎么样导出的呢?如果我们创建一个派生类,然后导出是一个基类的指针,那么我们可以访问派生类的内容吗?为了解决这个心中的疑惑,我们来继续走上学习的征途。

先来创建两个有继承关系的类,并且有虚拟函数的声明,这样才会创建虚拟表,代码如下:

struct PolymorphicPet {
	virtual ~PolymorphicPet() = default;
};

struct PolymorphicDog : PolymorphicPet {
	std::string bark() const { return "woof!"; }
};

在这里基类通过virtual来创建了一个虚析构函数,说明派生类的对象可以赋值给基类指针了,因为这样可以通过虚析构函数来删除派生类的对象。

接着我们来创建导出的定义:

	// 虚类转换
	py::class_<PolymorphicPet>(m, "PolymorphicPet");
	py::class_<PolymorphicDog, PolymorphicPet>(m, "PolymorphicDog")
		.def(py::init<>())
		.def("bark", &PolymorphicDog::bark);

	//创建一个基类指针的导出
	m.def("pet_store2", []() { return std::unique_ptr<PolymorphicPet>(new PolymorphicDog); });

以上是关于使用pybind11开发python扩展库的主要内容,如果未能解决你的问题,请参考以下文章

使用pybind11开发python扩展库

使用pybind11开发python扩展库

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

使用pybind11开发python扩展库

使用pybind11开发python扩展库

使用pybind11开发python扩展库