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

  FORUM HardWare.fr
  Programmation
  C++

  Pb de Template

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pb de Template

n°2145505
T'CHATTE
Posté le 12-06-2012 à 14:25:25  profilanswer
 

Salut à tous,
 
Je bloque sur un truc depuis quelques temps et google ne trouve pas vraiment ce que je veux (ou j'ai mal cherché :) )
Je voudrait faire une fonction templatée qui envoie le contenu d'un std::vector<T> dans un std::ostream.
Sauf que j'aimerai que ça marche à la fois pour les type de base et pour des types persos qui sont dans un autre namespace (disons monnamespace).
Ces types sont des tableaux ou des vecteurs dont je veux connaitre la taille dans ma fonction.
 
Donc finalement je voudrais faire quelque chose comme ça:
 

Code :
  1. template <typename T>
  2. std::ostream& operator<<(std::ostream &out, const std::vector<T> &a)
  3. {
  4. bool montype=false;
  5. std::string type_name=typeid(T).name();
  6. if (type_name.find("monnamespace" )!=std::string::npos) montype=true;
  7. for (typename std::vector<T>::const_iterator i=a.begin(); i!=a.end(); ++i)
  8. {
  9.  switch (montype)
  10.  {
  11.   case 0:
  12.    out<<*i;
  13.    break;
  14.   case 1:
  15.    int size=a[0].dim();
  16.    for (size_t j = 0; j < size; ++j)
  17.     out<<(*i)[j];
  18.    break;
  19.  }
  20. }
  21. return out;
  22. }


 
Mais ça ne marche pas car à la compilation il se rend bien compte que quand j'appelle la fonction sur un vector<double>, il ne peut pas trouver a[0].dim() sur un double ni mettre un indice [j].
Donc est-ce que quelqu'un sait comment faire ça?
Au pire je veux bien faire une fonction pour les std et une autre pour ceux de monnamespace mais je sais pas faire non plus  :( On peut faire en sorte que le template ne s'applique qu'aux types d'un certain namespace?
 
Merci! :)

mood
Publicité
Posté le 12-06-2012 à 14:25:25  profilanswer
 

n°2145551
Joel F
Real men use unique_ptr
Posté le 12-06-2012 à 16:40:38  profilanswer
 

euh ..

 
Code :
  1. template<class T, class Alloc>
  2. std::ostream& operator<<( std::ostream& os, const std::vector<T,Alloc>& a )
  3. {
  4.    std::ostream_iterator<std::string> os( std::cout, " " );
  5.    std::copy( a.begin(), a.end(), os );
  6.    return os;
  7. }
 

Ensuite donne un operator<< a ton type dans ton namespace special si besoin mais JAMAIS on ne teste dynamiquement typeid::name()

 


Message édité par Joel F le 12-06-2012 à 16:41:27
n°2145557
T'CHATTE
Posté le 12-06-2012 à 17:12:06  profilanswer
 

Il faudra que je me penche sur les allocator un jour ...
Merci, ça m'avance déjà beaucoup! :)
 
Bon par contre, il me reste un souci : je ne veux pas toucher à l'opérateur << des types de mon namespace (ils font déjà autre chose, genre un affichage "joli", tandis que là c'est pour ne récupérer que les nombres sans aucune mise en forme, pour les avoir directement en binaire).
Du coup il faut quand même que j'accède explicitement aux données qu'ils contiennent je pense, non?

n°2145565
Joel F
Real men use unique_ptr
Posté le 12-06-2012 à 18:24:46  profilanswer
 

c'est une mauvaise idée.

 

A ce moment fait un adaptateur ou un iomanip.


Message édité par Joel F le 12-06-2012 à 18:37:17
n°2145596
T'CHATTE
Posté le 12-06-2012 à 21:12:48  profilanswer
 

Ah ... ben je vois pas du tout de quoi tu parles ^^
Les adaptateurs, j'en ai jamais entendu parlé et les iomanip je savais pas qu'on pouvait en créer d'autres :)
Je vais me renseigner là dessus.
Tu aurais pas de la doc là dessus par hasard?
 
Merci pour ton aide! :jap:

n°2145600
Joel F
Real men use unique_ptr
Posté le 12-06-2012 à 22:18:48  profilanswer
 

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

  Pb de Template

 

Sujets relatifs
Free Hosting Manager PBTemplate de newsletter
Javascript : Pb sur évenement et function[CSS3] Pb de remonté menu animé
Pb affichage Firefow et Safari[Résolu] Pb accès base oracle
[Résolu] Pb de tri sur un varchar (Mysql)PB export dans MySQL
Pb transparance de div avec rgba[Résolu] Pb de résolution de type dans un template
Plus de sujets relatifs à : Pb de Template


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