У меня есть библиотека совместимости, которая использует SWIG для доступа к библиотеке C ++.Мне было бы полезно иметь возможность создавать объект Python в SWIG-оболочке внутри этого слоя (в отличие от принятия объекта C ++ в качестве аргумента или его возврата).Т.е. я хочу PyObject*
, который указывает на обернутый SWIG объект C ++.
Я обнаружил, что функция 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_IMPLICIT_CONV (я не уверен, что SWIG_NewPointerObj принимает это)
я хочу создать только объект, который используетсямой упаковочный слой.Я хочу создать его из моего собственного указателя на объект C ++ (чтобы я мог изменить значение объекта C ++ и отразить его в объекте Python. Мне нужно, чтобы он мог быть передан в функцию обратного вызова Python. Я хочусохраняйте этот экземпляр на протяжении всей жизни программы, чтобы не тратить время на создание / уничтожение идентичных объектов для каждого обратного вызова. Какой вариант подходит и что мне делать Py_INCREF
?