Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2995 connectés 

  FORUM HardWare.fr
  Programmation

  [C++] comment faire pour ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] comment faire pour ...

n°40316
freewol
Ceci n'est pas une citation
Posté le 16-06-2001 à 14:42:43  profilanswer
 

savoir si un pointeur pointe vers une instance de classe dérivée d'une autre ?  
 
Par ex :  
 
class CTrucdebase
   {
   int i;
   };
 
class CTruc : public CTrucdebase
   {
   float f;
   };
 
void *ptr;  
CTruc truc;  
ptr = (void*)&truc;
et là je voudrais savoir à partir de ptr, si l'élément vers lequel il pointe est dérivé de CTrucdebase ... (peu importe si le code est dégueulasse, je voudrais juste savoir si c'est possible)

mood
Publicité
Posté le 16-06-2001 à 14:42:43  profilanswer
 

n°40331
youdontcar​e
Posté le 16-06-2001 à 17:59:56  profilanswer
 

cherche sur google rtti (standard c++), ou iskindof. y'a moyen d'implémenter un iskindof() très simplement, cherche !

n°40365
janoscoder
Posté le 16-06-2001 à 22:53:51  profilanswer
 

Si t'as pas beaucoup de classes, tu peux faire
 
 
 
class A
{
public:
   enum Type {TypeA, TypeB, etc...};
...
   Type ChuideQuelType(){return A;}
};
 
class B: public A
{
    Type ChuideQuelType(){return B;}
};
 
 
main...
A* truc;
...
if (A->ChuideQuelTyp()==A::TypeA)
...
 
 
etc...


---------------
-----------------------
n°40374
freewol
Ceci n'est pas une citation
Posté le 16-06-2001 à 23:18:26  profilanswer
 

ben en fait si j'ai potentiellement bcp de classe puisque ça doit être évolutif avec des nouvelles classes, donc marche pas.
Pour ce qui est du iskindof(), j'ai cherché dans la MSDN, mais c'est très confut, et d'après ce que j'ai compris c'est en MFC, pour les classes CObject, et comme j'utilise pas MFC, je sais pas comment faire ...

n°40380
youdontcar​e
Posté le 16-06-2001 à 23:27:29  profilanswer
 

tu peux faire ton iskindof à la main sans problème. il te faut simplement un identifiant unique par classe. tu peux utiliser aux choix un entier , un guid , une string, etc ....
 
exemple avec une string :
 
class Base
{
  bool IsKindOf(char* str)
  {
    return !strcmp(str, "Base" ) ? true : false;
  }
};
 
class Derived : public Base
{
  bool IsKindOf(char* str)
  {
    return !strcmp(str, "Derived" ) ? true : Base::IsKindOf(str);
  }
}
 
etc ...
 
instanceOfBase->IsKindOf("base" ) retourne true
instanceOfBase->IsKindOf("supermegacoolclass" ) retourne false
instanceOfDerived->IsKindOf("supermegacoolclass" ) retourne false
instanceOfDerived->IsKindOf("Derived" ) retourne true
instanceOfDerived->IsKindOf("Base" ) retourne true
 
c'est bon ?

n°40382
freewol
Ceci n'est pas une citation
Posté le 16-06-2001 à 23:40:18  profilanswer
 

euh ouais, ça marcherait, mais en fait je voudrais savoir s'il n'y aurait pas un truc prévu exprès pour en C++, pour m'éviter d'écrire un fonction IsKindOf pour toutes les fonctions de mon projet !

n°40390
janoscoder
Posté le 17-06-2001 à 01:00:25  profilanswer
 

le trux exprès c'set la rtti.
c'est supporté en standard depuis 1998, et vas voir
http://www.dinkum.com/htm_cpl/index.html
sous la rubrique
<typeinfo>
 
et ça marche, mais attention, ça rajoutes qqes octets à une classe, alors si t'es beaucoup d'instances d'un classe très petite, c'est chiant


---------------
-----------------------

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C++] comment faire pour ...

 

Sujets relatifs
Plus de sujets relatifs à : [C++] comment faire pour ...


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)