使用pybind11开发python扩展库(10)

Posted caimouse

tags:

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

前面学习了从c++里导出类到python里使用,这是比较简单的方式,也是最基本的内容。接着下来我们来学习更高级的一些内容,比如C++里写一些虚函数,或者叫做接口函数,这些函数按理是可以在C++里的派生类进行重写,这是比较明白确认的事情了。但是你也许会问一下,如果这些接口函数需要在python里也能重写这些虚函数行吗?目前还是不能直接就可以重写的,需要采用第二个对象的方法才可以,这里需要一个临时对象的技巧才可以。

下面我们就来通过例子来学习这种技巧,让你的小伙伴在python使用C++的对象更加舒服。

假定有下面两个对象:

class Animal {
public:
    virtual ~Animal() { }
    virtual std::string go(int n_times) = 0;
};

class Dog : public Animal {
public:
    std::string go(int n_times) override {
        std::string result;
        for (int i=0; i<n_times; ++i)
            result += "woof! ";
        return result;
    }
};

Animal类是一个基类,也是接口类,里面定义了一个虚拟函数接口go;Dog类是一个Animal类的派生类,它已经重写了接口go,因此Dog可以构造对象了。

假定我们有一个函数可以调用Animal类的接口:

std::string ca

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

使用pybind11开发python扩展库(11)

使用pybind11开发python扩展库

使用pybind11开发python扩展库

使用pybind11开发python扩展库

使用pybind11开发python扩展库

使用pybind11开发python扩展库