Swig: преобразовать переменную-член (указатель на значение) в список Python - PullRequest
0 голосов
/ 07 октября 2019

У меня есть структура C ++ с двумя переменными-членами. Одним из них является указатель на динамически распределенную память, которая содержит массив объектов. Второе - это целое число с количеством объектов в массиве.

У меня есть функция, которая берет экземпляр структуры и заполняет две переменные-члены.

Я могу обернуть это простохорошо и использовать его из Python за исключением невозможности перебора выделенного массива. Это непрозрачный указатель на Python, и мне нужно иметь доступ к элементам массива. Как мне это сделать?

Предположим, что структура выглядит следующим образом:

typedef struct {
    int numElements;
    Result *results;
} ResultList;

, а функция выглядит следующим образом:

void populateResults(ResultList *);

1 Ответ

0 голосов
/ 08 октября 2019

Итак, похоже, это пример использования ключевого слова %extend. Я добавил следующее после объявления структуры ResultsList:

%extend ResultsList {
    Result& __getitem__(int idx) { return $self->results[idx]; }
}

Кажется, это работает. Теперь я могу перебрать список. Я думаю, что следующий шаг - превратить его в итеративный объект, реализовав также функции __next__ и __iter__.

...