Puisque C ++ strcut est une définition spéciale de la classe, il est préférable d'utiliser la classe cdef cpp au lieu de la structure cdef. Dans clang, l'utilisation de cdef struct lors de la lecture d'une structure qui n'hérite pas ou ne fait rien ne fonctionne pas (à partir d'août 2015).
Je ne sais pas quoi faire lors de la lecture de la structure héritée car elle n'est écrite nulle part dans la documentation cython.
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
Si vous faites cela, ```elaborated type se réfère à un typedef `apparaîtra dans la barre de structure HogeStruct dans pyx.
struct HogeStruct __pyx_v_bar;
`` est généré, donc il entre en conflit avec l'instruction de définition de la structure elle-même.
Surtout, vous pouvez utiliser cppclass au lieu de struct.
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
c'est tout.
Recommended Posts