IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Polymorphisme avec pointeur


Sujet :

C++

  1. #1
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 560
    Points
    4 560
    Par défaut Polymorphisme avec pointeur
    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*
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Salut,

    As-tu essayé de reinterpret_cast vers camera (celui-ci marche si j'ai compris) puis static_cast ce résultat vers le RayProvider ?
    En faisant un reinterpret_cast direct vers RayProvider, avec l'héritage multiple, les vtables etc, ca me parait un peu cavalier
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 560
    Points
    4 560
    Par défaut
    C'était osé, j'avoue, en héritage simple ça fonctionne.

    J'ai fait hériter RayProvider d'AbstractMovable, ce qui est sémantiquement correct dans mon modèle et plus de soucis.

    Merci
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD9] Utiliser une fonction d'un ActiveX avec pointeur
    Par archimor dans le forum WinDev
    Réponses: 3
    Dernier message: 21/03/2006, 01h41
  2. petit problème avec pointeurs
    Par Kerod dans le forum C
    Réponses: 12
    Dernier message: 09/12/2005, 16h48
  3. Problème de gestion de chaînes avec pointeur
    Par LorDjidane dans le forum C
    Réponses: 18
    Dernier message: 19/10/2005, 16h40
  4. [LG]Listes chainées avec pointeur
    Par PaowZ dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2004, 20h49
  5. probleme avec pointeurs de structures
    Par remi77 dans le forum C
    Réponses: 2
    Dernier message: 20/10/2003, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo