Типы SWIG INOUT (от C ++ до Python) - PullRequest
1 голос
/ 08 апреля 2019

Я создаю оболочку Python для API C ++, делая поддержку некоторых типов более или менее простой при использовании шаблонов, но API для справки нужны некоторые переменные, одна из которых - int, а другая - float.

Если я не ошибаюсь, это делается путем создания заявки INOUT, например:

%apply float& INOUT { float& a };
%apply int& INOUT { int& a };

Но как мне использовать эти типы внутри моего питона?

Заранее благодарим за любой совет.

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Эти параметры возвращаются из сгенерированной функции python (не совсем интуитивно, учитывая сигнатуру обернутой функции C ++). Допустим, это ваша открытая функция:

%apply float& INOUT { float& a };
%apply int& INOUT { int& b };

void foo(float& a, int& b);

Вы бы вызвали его из Python как

a = 3.14
b = 42

a, b = foo(a, b)

Если вы не фиксируете возвращаемые значения, a и b остаются без изменений.

0 голосов
/ 08 апреля 2019

Дорогой будущий читатель, вот те дроиды, которых ты ищешь:

myapi.new_intp()
myapi.new_floatp()  
myapi.intp_value(a)
myapi.floatp_value(b)
myapi.delete_intp(a)
myapi.delete_floatp(b)
...