foncteur et template

foncteur et template - C++ - Programmation

Marsh Posté le 11-03-2009 à 14:52:40    

Hi,
 
Comment appeler un foncteur templatiser :
 

Code :
  1. struct Dereference {
  2. template <typename T>
  3. const T& operator()(const T *ptr) const
  4. {
  5.  return *ptr;
  6. }
  7. };
  8. int main()
  9. {
  10. std::vector<int> v;
  11. v.push_back(10);
  12. v.push_back(19);
  13. std::transform( v.begin(), v.end(), std::ostream_iterator<std::string>(cout, "\n" ), Dereference()); // NOK, Dereference<vector<int> >() // NOK non plus
  14. std::cin.ignore(std::numeric_limits<int>::max(),'\n');
  15. }


 
Merci.

Reply

Marsh Posté le 11-03-2009 à 14:52:40   

Reply

Marsh Posté le 11-03-2009 à 15:02:31    

1) t'as un vector de int, pas de int*
2) ton ostream_iterator, il est sur une std::string, pas de int
 

Code :
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. #include <limits>
  5. #include <iterator>
  6. int main()
  7. {
  8.   int duet[] = { 1, 2 };
  9.   std::vector<int*> v;
  10.   v.push_back(&duet[0]);
  11.   v.push_back(&duet[1]);
  12.   std::transform(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, "\n" ), Dereference());
  13.   std::cin.ignore(std::numeric_limits<int>::max(),'\n');
  14. }

Reply

Marsh Posté le 11-03-2009 à 15:11:42    

et oui bienvu

Reply

Marsh Posté le 12-03-2009 à 19:42:00    

D'ailleurs fondamentalement ça change quelquechose de mettre le template sur la classe ou sur la fonction dans ce genre de cas ??

Reply

Marsh Posté le 20-03-2009 à 02:35:24    

c'est quelle feature du compilo ou du langage plutôt qui permet de ne pas avoir à spécifier le type du paramatère template lors de l'appel d'un functor, lorsque le template est placé sur la fonction et non sur la class ?


Message édité par weblook$$ le 20-03-2009 à 02:38:32

---------------

Reply

Marsh Posté le 20-03-2009 à 09:19:23    

la déduction du type des arguments

Reply

Marsh Posté le 20-03-2009 à 13:34:11    

appliquable qu'aux fonctions donc ,ty


---------------

Reply

Marsh Posté le 20-03-2009 à 13:45:08    

Tu appelles un constructeur d'une classe qui n'a pas de parametres template, pourquoi veux-tu lui passer des arguments templates?

Reply

Marsh Posté le 20-03-2009 à 13:55:04    

je pensais appeler ()...c'est donc la fonction transform qui se charge d'appeler l'operator () à partir de l'objet construit que l'on passe en paramtère


Message édité par weblook$$ le 20-03-2009 à 13:58:10

---------------

Reply

Sujets relatifs:

Leave a Replay

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