Карта типов по умолчанию, предоставляемая 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"
Вы знаете, как это сделать?