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

  FORUM HardWare.fr
  Programmation
  C++

  [Résolu] Pb de résolution de type dans un template

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Pb de résolution de type dans un template

n°1996964
Lan Wezel
Posté le 29-05-2010 à 00:01:39  profilanswer
 

Je veux faire une fonction qui prends deux containers de même taille et qui rend un container contenant la valeur min entre les deux pour chaque dimension.
 
1 3 5 6 2
3 1 0 8 9
--->
1 1 0 6 2
 
J'ai donc fait une version un peu naïve, mais j'ai un problème concernant la résolution du template de la fonction std::min.
Le "typeof(..)" est pour le moins crade. En effet, c'est spécifique à gcc il me semble.
 

Code :
  1. template<class Container>
  2.   Container minValues(const Container& c1, const Container& c2){
  3.     Container tmp = Container(c1.size());
  4.     std::transform(c1.begin(), c1.end(), c2.begin(), tmp.begin(), std::min<typeof(*(c1.begin()))> );
  5.     return tmp;
  6.   }


 
Comment puis-je faire ça plus proprement (sans typeof en gros) ?
Si je dois absolument ajouter un second argument au template (le type contenu dans le container), y a-t-il une solution pour n'être pas obligé de spécifier explicitement le template à l'appel ?


Message édité par Lan Wezel le 29-05-2010 à 12:47:38
mood
Publicité
Posté le 29-05-2010 à 00:01:39  profilanswer
 

n°1997014
Joel F
Real men use unique_ptr
Posté le 29-05-2010 à 12:32:50  profilanswer
 

Si ton Container ets un Container, il doit verifier le concept correspondant et définir un type interne value_type.

 
Code :
  1. template<class Container>
  2.   Container minValues(const Container& c1, const Container& c2){
  3.     Container tmp = Container(c1.size());
  4.     std::transform(c1.begin(), c1.end(), c2.begin(), tmp.begin(), std::min<typename Container::value_type> );
  5.     return tmp;
  6.   }
 

2e solution, un Polymorphic Function Object:

 

http://codepad.org/sJW7FGfg


Message édité par Joel F le 29-05-2010 à 12:33:14
n°1997020
Lan Wezel
Posté le 29-05-2010 à 12:51:27  profilanswer
 

Merci, je pense que je vais opter pour la première solution car ce sont en effet de "vrais" conteneurs.
 
Par contre je trouve la seconde solution plutôt élégante, je la garde dans un coin de ma tête. ;-)

n°1997022
Lan Wezel
Posté le 29-05-2010 à 13:24:31  profilanswer
 

En fait, je ne sais pas si tu sais pourquoi, mais la première solution ne semble pas tout le temps fonctionner. Ce que je trouve relativement bizarre (j'utilise des std::vector<double> ).  
J'ai une machine sur laquelle les deux solutions fonctionnent et une autre (cluster de calcul) sur laquelle seule la seconde semble être accepté.
 
La première est rejetée à la compil par un <unresolved overloaded function type> pour std::min<typename Container::value_type>
 
Peut-etre la différence vient-elle de la config de gcc, voire de la version (4.4.1 sur l'un et 4.3.4 sur l'autre) ?


Message édité par Lan Wezel le 29-05-2010 à 13:29:04
n°1997024
Joel F
Real men use unique_ptr
Posté le 29-05-2010 à 13:49:59  profilanswer
 

on ne peut pas passer de fonction template en objet fonction dans certains GCC. Je te conseille la 2e solution ;)


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

  [Résolu] Pb de résolution de type dans un template

 

Sujets relatifs
[Résolu] Arrière-plan+Boites -> effet différent suivant navigateur[RESOLU] question con mais utile image en html
[resolu] simuler un resultset vide[RESOLU][MySQL] requete toute simple
[Résolu] Bug div Firefox[resolu][PHP] parcourir un tableau d'objet
(Résolu) Coin3D/Open Inventor, problème install[RESOLU] [MYSQL] Perte d'espace utilisé
[JAVA][Resolu] Compression multi-volumesPb Ouverture de pop up
Plus de sujets relatifs à : [Résolu] Pb de résolution de type dans un template


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