У меня есть библиотека совместимости, которая использует SWIG для доступа к библиотеке С++. Мне было бы полезно иметь возможность создавать SWIP-обернутый объект Python внутри этого уровня (в отличие от принятия объекта С++ в качестве аргумента или возврата). То есть Я хочу, чтобы PyObject*
указывал на объект С++, обернутый SWIG.
Я обнаружил, что функция SWIG_NewPointerObj
выполняет именно это. Созданный SWIG файл xx_wrap.cpp
использует эту функцию, но он также доступен в заголовке, выпущенном swig -python -external-runtime swigpyrun.h
ОДНАКО, я не могу найти никакой ссылки на то, что последний аргумент этой функции. Похоже, что он определяет право собственности на объект, но нет документации, в которой говорится, что означает каждый из параметров (или даже все, что у всех есть). Похоже, что допустимыми являются следующие значения:
- 0
- SWIG_POINTER_OWN
- SWIG_POINTER_NOSHADOW
- SWIG_POINTER_NEW = OWN + NOSHADOW
- SWIG_POINTER_DISOWN (я не уверен, что SWIG_NewPointerObj принимает это)
- SWIG_POINTER_IMPLICIT_CONV (я не уверен, что SWIG_NewPointerObj принимает это)
Я хочу создать объект, который используется только в моем оберточном слое. Я хочу создать его из моего собственного указателя на объект С++ (так что я могу изменить значение объекта С++ и отразить его в объекте Python. Мне нужно его, чтобы он мог быть передан функции обратного вызова Python. сохраняйте этот один экземпляр на протяжении всей жизни программы, чтобы я не тратил время на создание/уничтожение одинаковых объектов для каждого обратного вызова. Какой вариант подходит и что я Py_INCREF
?