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

 


Dernière réponse
Sujet : [C++] comment faire pour ...
janoscoder 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

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
janoscoder 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
freewol 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 !
youdontcare 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 ?
freewol 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 ...
janoscoder 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...
youdontcare cherche sur google rtti (standard c++), ou iskindof. y'a moyen d'implémenter un iskindof() très simplement, cherche !
freewol 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)

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