Swig - вектор пользовательских объектов в качестве возвращаемого аргумента - PullRequest
0 голосов
/ 22 октября 2019

Если у меня есть такая функция c ++ ...

int myfunc(int a, std::vector<float> *b);

И у меня есть это в моем .i файле ...

%apply std::vector<float>* OUTPUT {std::vector<float>*};

Тогда в Python я могу сделать это ...

_,bout = mylib.myfunc(1)

и bout будет списком с плавающей точкой, как я хочу .... ууууу!

Но теперь я хочу сделать это на c ++ ...

int myfunc(int a, std::vector<MyObj> *b);

Простое выполнение следующих действий НЕ работает ...

%apply std::vector<MyObj>* OUTPUT {std::vector<MyObj>*};

Это дает ошибочный тип или число аргументов в Python. Я нашел менее чем идеальный способ заставить его работать, добавив это в мой файл .i ...

%include "std_vector.i"
namespace std {
    %template(vectormyobj) vector<MyObj>;
}

Тогда в Python я могу сделать это ...

bout = mylib.vectormyobj()
_ = mylib.myfunc(1,bout)

В этом случае bout - это список моих пользовательских типов, и все отлично работает .... ИСКЛЮЧИТЬ Я действительно хочу получить bout в левой части = вместо того, чтобыпередать это в качестве аргумента. Кажется, мне нужен Swig-fu% typemap (in) и / или% typemap (argout), чтобы заставить его работать, но я не смог обернуть его вокруг себя.

Может кто-нибудь дать руководство?

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