Wrapping C-enum in einem Python-Modul mit Swig

8

Ich habe ein einfaches enum in C in myenum.h:

%Vor%

Das Problem ist, dass, wenn ich dies auf Python abbilde, ich nur über den Modulnamen auf die Enumeration zugreifen kann, nicht über MyEnum. Daher sind die Werte EINS, ZWEI, DREI in allen anderen Funktionen enthalten, die ich definiere, anstatt mit MyEnum enthalten zu sein.

Meine api.i Datei ist:

%Vor%

Ich erzeuge mit SWIG

%Vor%

Und importieren Sie es in Python

%Vor%

Und jetzt muss ich die enum-Werte aus dem _api-Modul verwenden:

%Vor%

Während ich sie wie

verwenden möchte %Vor%

Weiß jemand, wie ich das erreichen kann?

    
mindvirus 09.05.2013, 21:12
quelle

2 Antworten

1

Es gibt eine SWIG-Funktion nspace , die Sie nicht möchten , aber leider wird es für Python noch nicht unterstützt. Ich musste das Enum immer in einer Struktur definieren, damit es in der von SWIG gewünschten Weise angezeigt wird. Beispiel:

%Vor%

Ergebnis:

%Vor%     
Mark Tolonen 12.05.2013 00:07
quelle
1

Was Sie verstehen müssen, ist, dass in C diese Namen in Ihrem Enum nicht so benannt sind wie in Python. Sie sollten wahrscheinlich etwas darüber lesen, wie Enums verwendet werden können, bevor Sie fortfahren.

Beachten Sie, dass diese Namen in Python nicht verfügbar sind, da es sich um global zugängliche Namen handelt. Am besten erstellen Sie ein Objekt in den folgenden Zeilen:

%Vor%

Dann ist A, B, C nur über _api.MyEnum.A usw. erreichbar, und A, B, C sind nicht direkt zugänglich.

    
Ian Stapleton Cordasco 12.05.2013 00:55
quelle

Tags und Links