переопределить функцию с аргументом указателя в pybind11 - PullRequest
0 голосов
/ 26 июня 2019

Я хочу переопределить класс в python с помощью pybind11

Вот интерфейс класса

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 ++ значение3 может быть суммой значения1 и значения2

Вот пример

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

Теперь я хочу переопределить класс A в python, поэтому у нас может быть другая реализация

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 нет указателя, я понятия не имею, как назначить значение 3 на стороне Python.

кстати, все классы из сторонней библиотеки, так что взламывать эти классы не очень хорошая идея.

Есть идеи?

...