У меня есть класс в 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, и, насколько я могу судить, она никогда не вызывается.