Używam SWIG 2.0 do tworzenia wrapperów Pythona dla biblioteki C++. Jedna metoda ma argument typu "const std :: map &". SWIG szczęśliwie generuje dla niego opakowanie, ale nie wiem, jak wywołać tę metodę. Jeśli przejdę, na przykład, {"a": "b"} dla tego argumentu, otrzymam komunikat "NotImplementedError: Wrong number or type of arguments for overloaded function".W jaki sposób SWIG zawija mapę <string, string> w języku Python?
Spojrzałem na wygenerowany plik .cxx w nadziei, że to wyjaśni, ale tak się nie stało. Oto kod, który przetwarza ten argument:
res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_std__mapT_std__string_std__string_t, 0 | 0);
if (!SWIG_IsOK(res4)) {
SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "new_Context" "', argument " "4"" of type '" "std::map< std::string,std::string > const &""'");
}
Bez wątpienia wie, że argument istnieje, i że jest to coś, co przekształca się w mapę. Ale nie mogę zrozumieć, co naprawdę chce, żebym się na to zgodził.
W pliku swig do was wyraźnie owinąć mapę? Myślę, że musisz utworzyć zmienną typu wypełnienia, wywołując wstawkę z kodu Pythona. – mark