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