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 :

Equivalent C++ de RUNTIME_CLASS


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut Equivalent C++ de RUNTIME_CLASS
    Bonjour,

    dans un code je vois des appels à des :
    - DECLARE_DYNCREATE,
    - IMPLEMENT_DYNCREATE,
    ce qui apparemment permet de créer des objets du type le + dérivé lorsqu'on fait appel à la fonction CRuntimeClass::CreateObject()

    Exemple :
    dans un code existant, on a une hierarchie (base --> dérivée) :
    CObject --> CDerivee1.
    On désire le modifier pour ajouter des membres. On crée alors une nouvelle classe, CDerivee2 qui dérive de CDerivee1 :
    CObject --> CDerivee1 --> CDerivee2

    Ainsi lorsqu'une instance de classe X désire dans le code existant créer des objets de type CDerivee1, et bien ce sont des des objets de type CDerivee2 qui sont crées.

    J'aimerais savoir quel est le mécanisme mis en place ?
    Serait-il possible de s'en passer en faisant autrement (C++ portable quoi) ?

    Merci par avance

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    Il n'y a pas d'équivalent à CreateObject() intégré au mécanisme de RTTI du C++ standard : Tu dois écrire la fonction toi-même.

    Conseil: Renseigne-toi sur le Design Pattern "Factory".
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    Ha d'accord, donc ça fait partie du RTTI ...
    Mais je n'ai pas activé l'option RTTI dans les options du projet ...

    Cependant, je ne vois pas trop comment est-ce que ça se passe.
    Comment est ce que le compilo peut créer des objets du type le + dérivé, alors que ce n'est pas ce que le code demande : il demande la création d'objet Derivee1, et "par magie" c'est un objet Derivee2 qui est crée !

    Bon Je vais regarder le DP factory comme conseillé.

    Merci

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    CRuntimeClass ne fait PAS partie du mécanisme standard de RTTI : C'est une implémentation MFC qui n'utilise pas du tout la RTTI (qui n'était pas encore bien développée à l'époque) et qui pour cette raison ne supporte pas les mêmes choses:
    • La RuntimeClass ne supporte pas l'héritage multiple.
    • Mais elle supporte la création dynamique d'objets ayant un constructeur par défaut,
    • et il me semble bien qu'il y a aussi une map de CRuntimeClass dans l'appli pour créer un objet directement à partir du nom de la classe...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 362
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 362
    Points : 20 391
    Points
    20 391
    Par défaut
    Citation Envoyé par olive_le_malin
    Ha d'accord, donc ça fait partie du RTTI ...
    Eh non c'est propre aux MFC tu as le code source des MFC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #define DECLARE_DYNCREATE(class_name) \
    	DECLARE_DYNAMIC(class_name) \
    	static CObject* PASCAL CreateObject();
    dans afx.h
    Attention les MFC c'est toute une hiérarchie de classe donc le méchanisme d'héritage dont tu parles c'est propre à ces classes là.

    J'ai l'impression que tu veux faire des classes "mutantes" je me trompe ?

  6. #6
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 362
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 362
    Points : 20 391
    Points
    20 391
    Par défaut
    Citation Envoyé par Médinoc
    et il me semble bien qu'il y a aussi une map de CRuntimeClass dans l'appli pour créer un objet directement à partir du nom de la classe...[/LIST]
    c'est apparemment ce qui est appelé en interne vtable ou tables de pointeur sur objets

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    Citation Envoyé par Mat.M
    Eh non c'est propre aux MFC tu as le code source des MFC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #define DECLARE_DYNCREATE(class_name) \
    	DECLARE_DYNAMIC(class_name) \
    	static CObject* PASCAL CreateObject();
    dans afx.h
    Attention les MFC c'est toute une hiérarchie de classe donc le méchanisme d'héritage dont tu parles c'est propre à ces classes là.

    J'ai l'impression que tu veux faire des classes "mutantes" je me trompe ?
    Ben déjà c'est de comprendre ce mécanisme pour bien l'utiliser.
    Et je me retrouve à faire évoluer un code qui l'utilise.
    Ca m'arrange vraiment bien que ça existe, parce que justement je n'aurai pas su comment faire si ça n'exsitait pas ... d'où ma question.

    Je regarde le DP factory ...

    @+

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/11/2002, 09h12
  2. equivalent à explode?
    Par djridou dans le forum Langage
    Réponses: 3
    Dernier message: 28/08/2002, 11h01
  3. [Kylix] Equivalent ShellExec en CLX
    Par Anonymous dans le forum EDI
    Réponses: 7
    Dernier message: 14/08/2002, 11h55
  4. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 21h07
  5. [Kylix] equivalent winsock avec kylix
    Par Victor dans le forum EDI
    Réponses: 2
    Dernier message: 08/05/2002, 07h43

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