classe template avec pointeur membre sur la classe

classe template avec pointeur membre sur la classe - C++ - Programmation

Marsh Posté le 11-01-2009 à 22:00:16    

bonjour,
 
J'ai un problème avec le code suivant.
 
Cette classe template, a un pointeur sur la classe elle même, mais avec des paramètres template différent, le problème est que je ne  
parviens pas à initialiser correctement cette variable.
 

Code :
  1. template<typename T,template <typename,typename> class A>
  2. struct B
  3. {
  4. typedef A<T,std::allocator<T> > container;
  5. typedef const T constdata_type;
  6. typedef typename container::const_iterator constIterator;
  7. template<typename U,template <typename,typename> class Z>
  8. void InitBstar()
  9. {
  10.  b = new B<U,Z>();
  11. }
  12. B(void);
  13. void print() const;
  14. template<typename U>
  15. void inserer(const U &first,...);
  16. private:
  17. container m_;
  18. B * b;
  19. template<typename U>
  20. void ajouter(const U& val);
  21. };


 
Le compilateur ne veut pas de cette ligne : b = new B<U,Z>();
 
error C2440: '=' : impossible de convertir de 'B<T,A> *' en 'B<T,A> *'
 
Quelqu'un voit le problème ?
 
Merci


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 11-01-2009 à 22:00:16   

Reply

Marsh Posté le 11-01-2009 à 22:12:19    

oui car B* est de type B<T,A> est non B<U,Z>.
Ton truc peut pas marcher comme ça.

Reply

Marsh Posté le 11-01-2009 à 22:25:14    

what's a pity


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 11-01-2009 à 23:02:49    

tu veut faire quoi là ???

Reply

Marsh Posté le 12-01-2009 à 00:08:15    

un truc générique de ce style :
 
 B< vector<string> , vector > b;
 b.inserer<string,vector>("une", "phrase ", "!" );
 
mais j'ai pas besoin finalement d'avoir un B* en fonction membre, par contre maintenant je suis embété avec le va_arg et le template apparement c'est pas trop compatible


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 12-01-2009 à 08:10:15    

le va-arg est unsafe en C++. Utilise boost::tuple

Reply

Marsh Posté le 12-01-2009 à 10:18:52    

quel est la bonne syntaxe :
 
 

Code :
  1. template<typename T,template <typename,typename> class A>
  2. struct B
  3. {
  4. template<typename U,template <typename,typename> class Z>
  5. void inserer(boost::tuples::tuple& my_tuple);
  6. };


 

Code :
  1. template<typename T,template <typename,typename> class A>
  2. template<typename U,template <typename,typename> class A2>
  3. void B<T,A>::inserer(boost::tuples::tuple& my_tuple)
  4. {
  5. }


 
Le compilateur me sort :
error C2988: impossible de reconnaître la définition/déclaration de modèle
 


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 12-01-2009 à 11:17:18    

un tuple en général, ca contient des objets de types A0,..,An
donc : tuple<A0,A1>
 
Lire la doc me parait pas mal.
 
http://www.boost.org/doc/libs/1_37 [...] guide.html

Reply

Marsh Posté le 12-01-2009 à 11:19:16    

t'inquiète je l'ai déjà lu de A à Z en diagonale


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 12-01-2009 à 11:23:05    

j'ai besoin d'une fonction qui puisse prendre un nombre variable d'arguments, si c'est pas possible d'utiliser un tuple "dynamique" comme argument d'une fonction c'est pas ce qu'il me faut.


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 12-01-2009 à 11:23:05   

Reply

Marsh Posté le 12-01-2009 à 12:20:04    

frenchtoucco a écrit :

j'ai besoin d'une fonction qui puisse prendre un nombre variable d'arguments, si c'est pas possible d'utiliser un tuple "dynamique" comme argument d'une fonction c'est pas ce qu'il me faut.

Si c'est le même type ça va, tu contournes avec un conteneur/tableau ou bien une surcharge <<  

Reply

Marsh Posté le 12-01-2009 à 12:56:55    

passer un vector comme paramètre à la fonction tu veux dire par exemple ? donc je laisse tomber les tuples ?


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 12-01-2009 à 13:06:35    

frenchtoucco a écrit :

passer un vector comme paramètre à la fonction tu veux dire par exemple ? donc je laisse tomber les tuples ?


tuple = taille N statique / connue à la compilation + N types.


Message édité par Taz le 12-01-2009 à 13:07:18
Reply

Marsh Posté le 12-01-2009 à 13:15:45    

mais je vois pas quelle syntaxe adopter pour créer une fonction prenant comme argument un tuple possédant un nombre de paramètres non connue à la compilation


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 12-01-2009 à 13:18:35    

tu voulais me dire d'utiliser, un tuple avec un certains nombres de paramèrtres connue à la compilation et de rajouter un paramètre vector ?


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 12-01-2009 à 13:33:07    

si tu as juste besoin d'une fonction à nb de param variables et tous de meme type : vector
si tu as besoin d'un nb fixe de param de type différent : tuple
si tu as besoin d'un nb variable de param de type different : vector de variant + visiteur associés

Reply

Marsh Posté le 12-01-2009 à 13:39:58    

ok


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 12-01-2009 à 13:58:02    

donc y a pas de solution équivalente à va_arg en C++ infiné ?par équivalente j'entends une solution qui permette d'apoter la même syntaxe:
 
f(int,int,int...)
f(string,string,...)
 
?


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 12-01-2009 à 14:01:03    

pas à ma connaissance, mais les tuple et initializer lists résoudront ce genre de problème assez facilement dans un avenir que l'on espère proche
 
Edit : tout ce qui te manque, c'est juste l'initializer list, d'ailleurs, si tu tiens à ce que tous tes arguments soient du même type ... ensuite, vector fait bien l'affaire comme l'a souligné Joel


Message édité par theshockwave le 12-01-2009 à 14:02:57

---------------
last.fm
Reply

Marsh Posté le 12-01-2009 à 15:54:27    

frenchtoucco a écrit :

donc y a pas de solution équivalente à va_arg en C++ infiné ?par équivalente j'entends une solution qui permette d'apoter la même syntaxe:
 
f(int,int,int...)
f(string,string,...)
 
?


aujourd'hui non. demain oui.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed