Bonjour à tous,
Une petite question sans doute basique pour les gourous du C++:
J'ai une classe abstraite:
Implémentée, par, par exemple Camera:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 namespace yz { class RayProvider { public: virtual Ogre::Ray getRay(const Ogre::Real x, const Ogre::Real y) = 0; }; }
Ce code interagit avec du code java, et pour des questions de performance, je stock l'adresse du pointeur coté java, puis je le récupère avec un reinterpret_cast.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 namespace yz { class Camera : public AbstractMovable, public RayProvider { public: Camera(Ogre::Camera* cam); Ogre::Ray getRay(const Ogre::Real x, const Ogre::Real y); //Autres fonctions et attributs membres. }; }
Ceci fonctionne bien si mon appel fait un reinterpret cast en Camera, mais dès lors que je le fais un
yz::RayProvider* provider = reinterpret_cast<yz::RayProvider*>(Adresse_du_pointeur_de_la_camera);
Toute utilisation de ce provider provoque un crash.
Je suppose que l'accès de la zone mémoire n'est alors pas correct (il appelle une autre méthode à la place), mais je ne sais pas quelle est la bonne méthode pour ne éviter de passer le type concret et ne manipuler que des RayProvider*
Partager