У меня есть класс на C ++, который я оборачиваю в python с помощью pybind11. В этом классе есть std :: function, и я хотел бы контролировать, как обрабатываются аргументы этой функции (например, политики возвращаемых значений). Я просто не могу найти синтаксис или примеры, чтобы сделать это ...
class N {
public:
using CallbackType = std::function<void(const OtherClass*)>;
N(CallbackType callback): callback(callback) { }
CallbackType callback;
void doit() {
OtherClass * o = new OtherClass();
callback(o);
}
}
завернутый в
py::class_<OtherClass>(...standard stuff...);
py::class_<N>(m, "N")
.def(py::init<N::CallbackType>(),
py::arg("callback"));
У меня все работает: я могу сделать это на python:
def callback(o):
dosomethingwith(o)
k = N(callback)
, но я хотел бы иметь возможность контролировать, что происходит при вызове callback(o);
- в основном, будет ли python владеть обернутой переменной o
или нет.
Я помещаю распечатку в деструктор OtherClass, и, насколько я могу судить, он никогда не вызывается.