2016-07-16 17 views
2

Ich versuche, eine C++ - Bibliothek mit Cython zu wickeln. Die C++ Header-Datei sagen MYFILE.H eine Klasse wie folgt erklärt:Wie deklariere ich eine Enum in einer Cpp-Klasse in Cython

class MyClass { 

public: 
    enum MyEnum{ 
     TYPE0 = 0, 
     TYPE1 = 1, 
     TYPE2 = 2, 
    }; 

    MyClass(MyEnum val=TYPE0){ 
     // ... 
    } 
    // ... 
} 

Die pxd Datei hat das:

cdef extern from "<MyFile.h>": 

    cdef cppclass MyClass: 

     cdef enum MyEnum: 
      TYPE0 = 0 
      TYPE1 = 1 
      TYPE2 = 2 

     MyClass(MyEnum val=TYPE0) except + 

Aber cython es nicht kompilieren. Wie mache ich das?

+1

Sie von uns zeigen den Compiler-Fehler beginnen könnten. –

+0

Der Fehler ist: module.pxd: 6: 8: Erwartet einen Bezeichner, gefunden 'Cdef' Fehler beim Kompilieren Cython-Datei: – user3431010

Antwort

2

Try-Namespace:

cdef extern from "MyFile.h" namespace "MyClass": 
    cdef enum MyEnum: 
     TYPE0 = 0 
     TYPE1 = 1 
     TYPE2 = 2 

Oder vielleicht wird dies auch funktionieren:

cdef extern from "MyFile.h": 
    cdef enum MyEnum "MyClass::MyEnum": 
     TYPE0 = 0 
     ... 
+1

Dies ist definitiv der Weg, es zu tun. Es ist wahrscheinlich wert hinzuzufügen, dass Sie dies in Python als 'MyEnum' aufrufen, nicht 'MyClass :: MyEnum' – DavidW

+0

Danke, ich habe es ausprobiert und es funktioniert. – user3431010