Как создать Swig Custom Typemap для std :: set, чтобы быть обернутым с родным python set? - PullRequest
0 голосов
/ 24 марта 2020

Карта типов по умолчанию, предоставляемая swig, ожидает список python в качестве входных данных для построения набора вместо собственного набора Python (см. здесь ). Действительно,

%include "std_set.i"
%template(IntSet) std::set<int>;

вызовет следующее поведение в python:

>>> import MyClass
>>> MyClass.IntSet([1,2,3,4]) # works
>>> MyClass.IntSet({1,2,3,4}) # does not work

Я попытался создать пользовательскую карту типов для этого, но пока не получилось. Вот мой текущий файл swig для этого:

%module MyClass

%{
    #include "MyClass.h"
%}

%include <typemaps.i>

%typemap(in) setin {$1 = PySequence_List($input);}
%typemap(out) setout {$result = PySet_New($1);}

%include "std_set.i"
%template(IntSet) std::set<int>;

%include "MyClass.h"

Вы знаете, как это сделать?

...