C ++ обратный вызов с Python через SWIG, когда функция принимает нетривиальные аргументы? - PullRequest
3 голосов
/ 02 июля 2011

Я только что прочитал следующий раздел учебника "SWIG and Python": http://www.swig.org/Doc1.1/HTML/Python.html#n11

Я понимаю, что они делают в примере, в основном вы пишете функцию C, которая вызывает Python.Тем не менее, приведенный пример занимает только двойное число в списке аргументов, что делает довольно простым создание списка аргументов для python.

У меня есть обратный вызов C ++, имеющий следующую подпись:

Vector (*CALLBACK)(Simulation*, Vector, Vector, double, void*)

где Vector и Simulation - мои собственные классы, а void * - для clientData, содержащего PyObject (как используется в примере)

Я знаю, что SWIG оборачивает классы Vector и Simulation, потому что я могу их создатьв оболочке питона.Единственная проблема в том, что я понятия не имею, как преобразовать аргумент Vector в функции обратного вызова в соответствующий PyObject для списка аргументов python.Очевидно, у SWIG есть какой-то способ сделать это, когда он оборачивает сам класс, но я не знаю, как выполнить это вручную в функции.

Любая помощь очень ценится!-Chase

1 Ответ

0 голосов
/ 08 июля 2011

Я не думаю, что ваш вопрос на самом деле о SWIG; это чисто про Python. На этом уровне ваша проблема заключается в простом вызове Python из C, поэтому вам нужно изучить «Анализ аргументов и построение значений» в документации по Python. (Также «Расширение и внедрение интерпретатора Python» .)

...