覆盖函数在pybind11中具有指针参数

时间:2019-06-26 12:30:26

标签: pybind11

我想用pybind11覆盖python中的类

这是类接口

class A {
  public:
    virtual bool Add(int value1, int value2, int* value3) = 0;
};

class B: public A {
  public:
    bool Add(int value1, int value2, int* value3) override {
      PYBIND11_OVERLOAD_PURE(
          bool,
          B,
          Add,
          value1,
          value2
    );
    // is it possible to get the return value of PYBIND11_OVERLOAD_PURE and do some computations?
  }
};

void put(A& a, int value1, int value2) {
  int value3;
  a.Add(value1, value2, &value3);
  std::cout << value3 << std::endl;
}

在c ++实现中,value3可以是value1和value2之和

这里是例子

class C: public A {
  public:
    C() {
    }
    bool Add(int value1, int value2, int* value3) override {
      *value3 = value1 + value2;
      return true;
    }
};

现在我想在python中覆盖类A,因此我们可以有不同的实现方式

c = C()
put(c, 1, 2)

class D(A):
    def Add(self, value1, value2):
        #  value1 + value2
        # how to assign the value to the output?
        return True
d = D()
# undefine value3
put(d, 1, 2)

由于python没有指针,所以我不知道如何在python端分配value3。

顺便说一句,所有类都来自第三方库,因此入侵这些类不是一个好主意。

有什么主意吗?

0 个答案:

没有答案