Da C ++ strcut eine spezielle Definition von Klasse ist, ist es besser, cdef cpp class anstelle von cdef struct zu verwenden. In clang funktioniert die Verwendung von cdef struct beim Lesen einer Struktur, die nichts erbt oder tut, nicht (Stand August 2015).
Ich weiß nicht, was ich beim Lesen der geerbten Struktur tun soll, da sie nirgendwo in der Cython-Dokumentation geschrieben ist.
hoge.h
typedef struct {
int moke;
double fuga;
} HogeStruct;
hoge.pxd
cdef extern from "hoge.h" nogil:
cdef struct HogeStruct:
int fuga
double piyo
hoge.pyx
def foo():
cdef HogeStruct bar
Wenn Sie dies tun, wird `ausgearbeiteter Typ auf ein typedef
in der Struktur HogeStruct-Leiste in pyx angezeigt. ``
struct HogeStruct __pyx_v_bar;` `` wird generiert, sodass es mit der Definitionsanweisung der Struktur selbst in Konflikt steht.
Insbesondere können Sie cppclass anstelle von struct verwenden.
hoge.h
typedef struct {
int moke;
double fuga;
} HogeStruct;
hoge.pxd
cdef extern from "hoge.h" nogil:
cdef cppclass HogeStruct:
int fuga
double piyo
hoge.pyx
def foo():
cdef HogeStruct bar
das ist alles.
Recommended Posts