Bonjour à tous,

Une petite question sans doute basique pour les gourous du C++:

J'ai une classe abstraite:

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;
 
};
 
}
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
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.
};
 
}
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.

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*