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

  FORUM HardWare.fr
  Programmation
  C++

  Pointeur de template

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pointeur de template

n°1585964
Vel-Ryphon
Posté le 12-07-2007 à 19:28:47  profilanswer
 

Salut,
 
j'ai une structure template qui me permet de gérer juste le paramétrage du type (int, float, etc etc)
 
je souhaite faire un tableau constitué de ces éléments --> pointeur
 
problème : je veux pouvoir mettre dans le tableau, des instanciations de ce template avec des type différents
 
exemple :
-----------------------------------------
template <class type> struct MyStruct{...};
 
MyStruct**   array;
 
array = new MyStruct*[10];
array[0] = new MyStruct<int>;
array[1] = new MyStruct<float>;
array[2] = new MyStruct<double>;
 
etc
-------------------------------------
 
Bien entendu, cette syntaxe ne marche pas.
 
Est-ce que vous savez si déjà c'est possible, et si oui quelle est la bonne syntaxe ?

mood
Publicité
Posté le 12-07-2007 à 19:28:47  profilanswer
 

n°1585977
nathan_g
Posté le 12-07-2007 à 20:16:53  profilanswer
 

Tu ne pourrais pas essayer de faire un héritage.
Sans entrer dans le détail de la programmation, on peut imaginer de créer une classe "Article" puis des classes héritant de Article qui se nommeraient "Fruit","Voiture" ou "Animaux" et qui hériteraient de "Article". Tu pourrais ensuite créer un unique tableau destiné à stocker des objets de type "Article" et y placer des objets de chacune de ces trois classe, sans aucun problème.
 
J'espère avoir été à peu près clair. Cela donne quelque chose comme :
 
[cpp]
 
class MyStruct
{
....
}
 
class Entier : public MyStruct
{
....
 
private :
 
int un_entier;
}
 
class Flottant : public MyStruct
{
....
 
private :
 
float un_float;
}
 
 
class DoublePrecision : public MyStruct
{
....
 
private :
 
double un_double;
}
 
....
 
MyStruct* tableau = new MyStruct[10]; // Tableau d'objet pouvant contenir des objets de la classe Entier, Flottant ou DoublePrecision
 
[\cpp]
 
Qu'en penses-tu ?

n°1585978
nathan_g
Posté le 12-07-2007 à 20:17:40  profilanswer
 

Tu ne pourrais pas essayer de faire un héritage.  
Sans entrer dans le détail de la programmation, on peut imaginer de créer une classe "Article" puis des classes héritant de Article qui se nommeraient "Fruit","Voiture" ou "Animaux" et qui hériteraient de "Article". Tu pourrais ensuite créer un unique tableau destiné à stocker des objets de type "Article" et y placer des objets de chacune de ces trois classe, sans aucun problème.  
 
J'espère avoir été à peu près clair. Cela donne quelque chose comme :  
 

Code :
  1. class MyStruct
  2. {
  3. ....
  4. }
  5. class Entier : public MyStruct
  6. {
  7. ....
  8. private :
  9. int un_entier;
  10. }
  11. class Flottant : public MyStruct
  12. {
  13. ....
  14. private :
  15. float un_float;
  16. }
  17. class DoublePrecision : public MyStruct
  18. {
  19. ....
  20. private :
  21. double un_double;
  22. }
  23. ....
  24. MyStruct* tableau = new MyStruct[10]; // Tableau d'objet pouvant contenir des objets de la classe Entier, Flottant ou DoublePrecision

 
 
Qu'en penses-tu ?
 
PS : désolé pour le message précédent sans les bonnes balises

n°1585987
IrmatDen
Posté le 12-07-2007 à 20:36:27  profilanswer
 

Salut,

Vel-Ryphon a écrit :

je souhaite faire un tableau constitué de ces éléments --> pointeur


Non, vector (edit: ou autre conteneur bien sûr)

Vel-Ryphon a écrit :

problème : je veux pouvoir mettre dans le tableau, des instanciations de ce template avec des type différents


boost::any te conviendrait peut-être?


Message édité par IrmatDen le 12-07-2007 à 20:37:06
n°1585995
Un Program​meur
Posté le 12-07-2007 à 21:30:37  profilanswer
 

Les différentes spécialisations d'un template sont des types qui n'ont rien en commun.  Si tu veux les mettre dans un conteneur, il y a deux solutions.  Soit tu encapsules dans un type adéquat (boost::any ou quelque chose de plus spécialisé), soit tu donnes une classe de base à ton template:
 

Code :
  1. struct MyStructBase {
  2.    ...
  3. };
  4. template <typename T> struct MyStruct: MyStructBase {
  5.    ...
  6. };
  7. std::vector<MyStructBase*> array;
  8. array.push_back(new MyStruct<int> );
  9. array.push_back(new MyStruct<double> );

n°1586010
Vel-Ryphon
Posté le 12-07-2007 à 22:31:14  profilanswer
 

Merci pour vos réponse !
 
Pour l'héritage, je ne souhaite pas créer de classe, mais rester dans les struct, c'est ma norme de programmation pour mon problème
 
Pour boost::any, je ne connais pas du tout, est-ce que vous pourriez m'expliquer dans le détail ce que c'est ?
 
Poour les vector, je préfère encore une fois travailler à la mano avec un pointeur, norme de prog.
 
Enfin, pour l'exemple de UnProgrammeur, je ne comprends pas trop :si MyStructBase n'est pas un template, quèy place-t-on comme attribut sachant que tout attribue étant de type paramétrable ne peut pas s'y trouver ?

n°1586012
Joel F
Real men use unique_ptr
Posté le 12-07-2007 à 22:42:11  profilanswer
 

Vel-Ryphon a écrit :


Pour l'héritage, je ne souhaite pas créer de classe, mais rester dans les struct, c'est ma norme de programmation pour mon problème


Norme de merde, t'as qu'a faire du C tant que tu y est :o
 

Vel-Ryphon a écrit :


Pour boost::any, je ne connais pas du tout, est-ce que vous pourriez m'expliquer dans le détail ce que c'est ?


Nous non, eux oui : http://www.boost.org/doc/html/any.html
 

Vel-Ryphon a écrit :


Poour les vector, je préfère encore une fois travailler à la mano avec un pointeur, norme de prog.


Norme de merde, le retour
 

Vel-Ryphon a écrit :


Enfin, pour l'exemple de UnProgrammeur, je ne comprends pas trop :si MyStructBase n'est pas un template, quèy place-t-on comme attribut sachant que tout attribue étant de type paramétrable ne peut pas s'y trouver ?


Revise tes bases de C++ : http://frog.isima.fr/antoine/heritage.shtml :o

n°1586019
Vel-Ryphon
Posté le 12-07-2007 à 23:26:38  profilanswer
 

Merci pour la réponse, même si elle était un peu agressive -_-

n°1586058
Un Program​meur
Posté le 13-07-2007 à 09:33:28  profilanswer
 

Vel-Ryphon a écrit :

Pour l'héritage, je ne souhaite pas créer de classe, mais rester dans les struct, c'est ma norme de programmation pour mon problème


 
C'est quoi cette norme? Il n'y a pas de difference entre class et struct a part l'accessibilite par defaut des membres et des classes de base.
 

Citation :

Pour boost::any, je ne connais pas du tout, est-ce que vous pourriez m'expliquer dans le détail ce que c'est ?


http://www.boost.org
 

Citation :

Poour les vector, je préfère encore une fois travailler à la mano avec un pointeur, norme de prog.


 
Tu es sur que tu ne veux pas programmer en assembleur?  :whistle:  
 

Citation :

Enfin, pour l'exemple de UnProgrammeur, je ne comprends pas trop :si MyStructBase n'est pas un template, quèy place-t-on comme attribut sachant que tout attribue étant de type paramétrable ne peut pas s'y trouver ?


 
Tu y places ce dont tu as besoin.  A priori c'est independant du parametre template puisque tu veux justement faire des manipulations independantes de celui-ci.

n°1586084
Vel-Ryphon
Posté le 13-07-2007 à 10:01:34  profilanswer
 

merci UnProgrammeur, apparemment ça marche nickel avec la solution que tu m'as proposé à la fin, et c'est exactement ce que je recherchais ^^.
 
Encore merci

mood
Publicité
Posté le 13-07-2007 à 10:01:34  profilanswer
 

n°1586085
Joel F
Real men use unique_ptr
Posté le 13-07-2007 à 10:01:41  profilanswer
 

Vel-Ryphon a écrit :

Merci pour la réponse, même si elle était un peu agressive -_-


Bah, faut juste apprendre à décoder les ":o" :o

n°1588982
preposteru​s
Posté le 19-07-2007 à 18:01:39  profilanswer
 

Est-il possible d'ajouter des fonctions virtuelles dans le code proposé par Programmeur pour y accéder ensuite via array[i]->Truc(machin) ?
(où le type de machin correspont à celui du MyStruct en i)


Message édité par preposterus le 19-07-2007 à 18:08:03

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

  Pointeur de template

 

Sujets relatifs
Serveur avec socket Unix + Pointeur de fonctions (contexte memoire ?)Template c++
Typage d'un pointeur "void *"new qui renvoie un pointeur énorme?
templateliste chnainée avec 2 pointeur sur le premier et le dernier element
pointeur sur fonction membre / switch case[debutant] pointeur
Template / Pointeur de fonctionPointeur sur template ?
Plus de sujets relatifs à : Pointeur de template


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