Есть ли метод для преобразования переменной PyUnicodeObject в тип PyObject? - PullRequest
1 голос
/ 15 мая 2010

Значение, являющееся PyUnicodeObject, необходимо передать в переменную PyObject. Есть ли какой-либо способ преобразования для этого?

спасибо karnol

Ответы [ 2 ]

3 голосов
/ 15 мая 2010

Вы можете просто использовать приведение в вашем коде C для этой цели:

PyUnicodeObject *p = ...whatever...;
callsomefun((PyObject*)p);

Все различные конкретные конкретные типы PyWhateverObject можно рассматривать как «производные от» PyObject. Теперь в C нет понятия наследования, поэтому в нем нет «производного», но виртуальная машина Python синтезирует его очень просто, гарантируя, что первый член структуры каждого такого объекта (или первый член первого члена, или ...) является PyObject struct (для этого есть макрос). Это гарантирует, что обычное приведение C-указателей (хотя технически «рискованно», так как компилятор не может проверить эту правильность - если вы приведете не то, что произойдет, вы просто потерпите крах во время выполнения ;-), работает правильно, если используется правильно между указателем на PyObject и любой указатель на конкретную, конкретную структуру типа Python.

2 голосов
/ 15 мая 2010

PyUnicodeObject - это подмножество PyObject, поэтому не должно возникнуть никаких проблем при его передаче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...