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

  FORUM HardWare.fr
  Programmation
  C++

  classe template amie

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

classe template amie

n°594324
blackgodde​ss
vive le troll !
Posté le 19-12-2003 à 17:05:40  profilanswer
 

Bonjour,
j'ai une classe template qui doit accéder aux membres privés d'une autre classe.
 
j'ai essayé ceci :
 

Code :
  1. template<typename T>
  2. class gcRef
  3. {
  4.   // ...
  5. };
  6. class GC
  7. {
  8.   friend gcRef<typename>;
  9.   // ...
  10. };


 
mais ca ne fonctionne pas, qq1 pourrait m'eclairer ?


Message édité par blackgoddess le 19-12-2003 à 17:06:01

---------------
-( BlackGoddess )-
mood
Publicité
Posté le 19-12-2003 à 17:05:40  profilanswer
 

n°594329
hellbilly
free smile
Posté le 19-12-2003 à 17:17:27  profilanswer
 

BlackGoddess a écrit :

Code :
  1. template<typename T>
  2. class gcRef
  3. {
  4.   // ...
  5. };
  6. template<typename T>
  7. class GC
  8. {
  9.   friend class gcRef<T>;
  10.   // ...
  11. };


 

n°594335
blackgodde​ss
vive le troll !
Posté le 19-12-2003 à 17:33:25  profilanswer
 

(dsl, fausse manip d'edit)


Message édité par blackgoddess le 19-12-2003 à 17:34:41

---------------
-( BlackGoddess )-
n°594336
blackgodde​ss
vive le troll !
Posté le 19-12-2003 à 17:33:51  profilanswer
 

mmh ...
c'est pas possible que GC ne soit pas template ?
 
sinon, voila ce que j'ai essayé de faire, ca me poserait un problème de polymorphisme ?
 

Code :
  1. class gcObject
  2. {
  3. };
  4. struct A : gcObject
  5. {
  6. };
  7. template<typename T>
  8. struct gcRef
  9. {
  10.   void methode() { gcrefs.i=3; }
  11. };
  12. template<typename T>
  13. class GCrefs
  14. {
  15.   friend gcRef<T>;
  16.   int i;
  17. };
  18. GCrefs<gcObject*> gcrefs;
  19. void main()
  20. {
  21.   GCrefs<A*> test;
  22.   test.methode();
  23. }


 
le compilo me dit :
 
error C2248: 'gc::GCrefs<T>::i' : cannot access private member declared in class 'gc::GCrefs<T>'
        with
        [
            T=gc::gcObject *
        ]
        and
        [
            T=gc::gcObject *
        ]
ici : gcrefs.i=3;


Message édité par blackgoddess le 19-12-2003 à 17:35:14

---------------
-( BlackGoddess )-
n°594343
hellbilly
free smile
Posté le 19-12-2003 à 17:54:08  profilanswer
 

Si tu veux que GC ne soit pas template, tu lui passe un type connu :

Code :
  1. class GC
  2. {
  3. friend gcRef<gcObject *>; // par exemple
  4. // ...  
  5. };


Mais c'est pas génial, il vaut mieux que GC soit template pour conserver la généricité.
 
Sinon ca ne serait pas plutot gcRef<A*> test; ?


Message édité par hellbilly le 19-12-2003 à 17:59:57
n°594346
blackgodde​ss
vive le troll !
Posté le 19-12-2003 à 18:06:02  profilanswer
 

gcRef<A*> test; >> oups oui, autant pour moi
 
sinon, chui nouille, je vais mettre le int i de GC refs en private static dans gcRef :)


---------------
-( BlackGoddess )-
n°594426
Taz
bisounours-codeur
Posté le 19-12-2003 à 20:54:53  profilanswer
 

si je comprends bien ... exemple à la con
 

Code :
  1. template<typename T>
  2. struct Foo
  3. {
  4.   void call() const;
  5. };
  6. template<typename T>
  7. struct Bar
  8. {
  9.   void call() const;
  10. };
  11. struct A
  12. {
  13.   template<typename T>
  14.   friend class Foo;
  15.   friend class Bar<int>;
  16. private:
  17.   void call() const { }
  18. };
  19.    
  20. template<typename T>
  21. void Foo<T>::call() const
  22. {
  23.   A().call();
  24. }
  25. template<typename T>
  26. void Bar<T>::call() const
  27. {
  28.   A().call();
  29. }
  30. int main()
  31. {
  32.   Foo<void>().call();
  33.   Foo<int>().call();
  34.   Bar<void>().call(); /* Erreur */
  35.   Bar<int>().call();
  36. }


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

  classe template amie

 

Sujets relatifs
comment appliquer n fois un template?Héritage de classe et vector
Source de la classe LoginContextVB + Classe - Tableau d'objet
Comment se servir dans une classe d'une fonction menbre d'une autre?[C++/gcc 3.2.3] Template, petit bout de code qui ne fonctionne pas
[Java]Appeler une méthode d'une classe à partir d'1 String [Résolu]Comment inclure une classe dans une autre?
template , methode virtuelle et inlineGestion d'une variable de classe
Plus de sujets relatifs à : classe template amie


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR