Wie wickelt SWIG eine Mapstring, String in Python?

8

Ich verwende SWIG 2.0, um einen Python-Wrapper für eine C ++ - Bibliothek zu erstellen. Eine Methode hat ein Argument vom Typ "const std :: map & amp;". SWIG erzeugt glücklich einen Wrapper dafür, aber ich kann nicht herausfinden, wie man die Methode aufruft. Wenn ich zum Beispiel für dieses Argument {"a": "b"} übergebe, erhalte ich den Fehler "NotImplementedError: Falsche Zahl oder Art von Argumenten für überladene Funktion".

Ich schaute auf die erzeugte .cxx-Datei in der Hoffnung, dass es klären würde, aber es tat es nicht. Hier ist der Code, der dieses Argument verarbeitet:

%Vor%

Es ist klar, dass dieses Argument existiert und dass es etwas sein soll, das in eine Karte umgewandelt wird. Aber ich kann nicht herausfinden, was ich eigentlich dafür will.

    
peastman 27.01.2012, 22:58
quelle

1 Antwort

16

Wenn Sie eine C ++ - Vorlage verwenden (z. B. std::map<string, string> ), müssen Sie in Ihrer .i -Datei einen Alias ​​dafür erstellen, damit Sie ihn in Python verwenden können:

%Vor%

Nehmen wir nun an, Sie möchten eine Funktion wie folgt umbrechen:

%Vor%

Auf der Python-Seite müssen Sie einen map_string_string an foo übergeben, nicht an ein Python-Diktat. Es stellt sich heraus, dass Sie ein Python-Diktat problemlos in eine Map konvertieren können, indem Sie Folgendes tun:

%Vor%

Wenn du also foo aufrufen willst, musst du das tun:

%Vor%

Hier ist ein vollständiger Beispielcode, der funktioniert.

%Vor%

Und der Python-Testcode:

%Vor%

Und meine Befehlszeile:

%Vor%     
Nathan Binkert 27.01.2012, 23:52
quelle

Tags und Links