кортеж возвращается оболочкой python, сгенерированной swig для вектора C ++ - PullRequest
0 голосов
/ 24 октября 2018

Для следующего API C ++:

std::vector<float> get_sweep_points()
{
    return program->sweep_points;
}

Swig генерирует оболочку, которая возвращает кортеж () , а не список [] .Зачем?Как я могу заставить Swig вернуть список в Python.

1 Ответ

0 голосов
/ 25 октября 2018

Если вы используете std_vector.i, вы получите карты типов, реализованные std_vector.i.Если вам это не нравится, вы должны написать свои собственные карты типов.

Вот карта типов, которая переопределяет поведение по умолчанию (без проверки ошибок) и возвращает список вместо кортежа:

%typemap(out) std::vector<int> (PyObject* obj) %{
    obj = PyList_New($1.size());
    for(auto i = 0; i < $1.size(); ++i)
        PyList_SET_ITEM(obj, i, PyLong_FromLong($1[i]));
    $result = SWIG_Python_AppendOutput($result, obj);
%}

Конечно, вы также можете просто сделать v = list(get_sweep_points()), и теперь это список: ^)

...