J'essaye d'enrouler du code C++ qui utilise des structures avec des constructeurs, et de ne pas comprendre comment.Appelez directement le constructeur de structure C++ à partir de cython
C++ struct:
typedef struct point_3d_t
{
double x;
double y;
double z;
point_3d_t(double x, double y, double z)
: x(x)
, y(y)
, z(z)
{}
} point_3d;
wrapper Cython:
cdef extern from "./cppdar.hpp":
ctypedef struct point_3d:
point_3d(double, double, double)
double x;
double y;
double z;
Maintenant, je serais attendre pouvoir construire la struct par quelque chose comme cdef point_3d p1(v, v, v)
(à partir du fichier cython) , mais je n'arrive pas à comprendre comment utiliser Cython pour utiliser le constructeur fourni.
J'ai essayé:
cdef point_3d p1(v, v, v)
cdef point_3d p1 = point_3d(v, v, v)
cdef point_3d p1(0, 0, 0)
cdef point_3d p1 = point_3d(0, 0, 0)
Où v
est un cdef double v = 0
explicite, mais aucun travail.
En utilisant cdef point_3d p1
, p1.x = nnnn
, etc ..., mais c'est ennuyeux, et je ne vois pas pourquoi je ne devrais pas être en mesure d'utiliser le constructeur par défaut, je pense.
Essayer de rechercher le problème donne beaucoup de fouillis liés aux constructeurs de classe, ce qui n'a pas été utile.
Je ne suis pas sûr de comprendre ce que votre travail vous apporte? Vous avez toujours besoin d'un constructeur par défaut pour être disponible je pense. – DavidW
@DavidW - Oui, vous obtenez toujours un processus de construction, de construction et de déplacement, mais c'est beaucoup mieux qu'instancier par défaut, puis de définir les membres individuellement. –
Je crois que Cython peut faire la construction puis l'affectation de l'assignation/déplacement: 'cdef point_3d p' puis plus tard' p = point_3d (...) '. Vous pourriez avoir besoin de le dire sur le constructeur par défaut ainsi que celui que vous utilisez. – DavidW