Wie erhalten Sie Referenz- und Zeigerargumente in Python + SWIG?

8

Ich habe eine C ++ Funktion, in der zwei Argumente wie im folgenden Beispiel angegeben sind.

%Vor%

Ich kann diese Funktion problemlos in C oder C ++ verwenden, aber ich weiß nicht, wie ich es von einem Python-Modul aus aufrufen kann, das mit SWIG erzeugt wurde. Ich nehme an, dass ich eine andere C ++ - Funktion schreiben muss, die zum Beispiel std :: pair zurückgibt. Aber wenn möglich, würde ich gerne einen Workaround auf der Python-Seite kennenlernen. Könnte jemand helfen?

    
Akira Okumura 03.03.2013, 11:06
quelle

1 Antwort

8

Für eine ganze Reihe von Fällen (z. B. int *n ) wäre es ausreichend zu schreiben:

%Vor%

verwendet einige Standard-Typmaps, die SWIG für Ausgabeparameter bereitstellt. (Es gibt auch INOUT und INPUT, die ähnlich sind).

In diesem Fall stimmen wir zwar mit keinem der vordefinierten Fälle überein, müssen aber dasselbe manuell tun. Das sind im Grunde zwei Typemaps pro Argument - eine Input Typmap, die für den eigentlichen Funktionsaufruf etwas Temporäres erzeugt und anstelle einer realen Eingabe ein Argument verwendet, das das Ergebnis vom temporären Python zurückbringt. Im Fall von Python ist es sinnvoll, ein Tupel für die Rückgabe mehrerer Argumente zu verwenden.

Ein Beispiel:

%Vor%

Zu beachtende Punkte:

Die temporären Variablen ( int temp , char *temp ) werden automatisch umbenannt, wodurch der scheinbare Namenskonflikt gestoppt wird. %append_output ist ein SWIG-Makro, das erweitert wird, um etwas in der Rückseite des $result -Tupels in Python hinzuzufügen. Wenn Ihre Funktion foo dynamisch zugewiesenen Speicher wäre, müssten Sie damit umgehen. Die Freearg Typmap ist oft nützlich, wenn der In Typmap Speicher dynamisch zuweisen muss.

Dies war ausreichend, damit ich es kompilieren und ausführen konnte:

%Vor%     
Flexo 24.03.2013, 08:35
quelle

Tags und Links