Lors de la lecture d'une structure C ++ avec Cython

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.

référence

Lorsque cdef struct

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.

utiliser la classe cpp

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

Lors de la lecture d'une structure C ++ avec Cython
Remarque sur l'encodage lorsque LANG = C en Python
Utilisez pydantic lors de la lecture des variables d'environnement en Python
Gérer les signaux en langage C
Accéder à MongoDB en C
Next Python en langage C
API C en Python 3
Intégration du langage machine en langage C
Tri de tas fait en langage C
Utiliser des expressions régulières en C
Imiter Numpy de Python en C #
Recherche binaire en Python / C ++
Attention lorsque os.mkdir en Python
Arborescence de surface totale minimale en C #
Accélérez le traitement en utilisant le vecteur C ++, unordered_map en interne en Cython