Problème avec for_each

Problème avec for_each - C++ - Programmation

Marsh Posté le 12-12-2003 à 21:32:06    

Salut à tous,
 
alors voici mon problème:
 
Admettons la classe suivante:
 
class A
{
std::vector<Possession> v_poss;
 
void foo();
void toto(const Possessions & possession);
};
 
Je voudrais faire ça:
 
void A::foo()
{
for_each(v_poss.begin(),v_poss.end(),toto);
 
}
 
Mais ça ne fonctionne pas... J'ai vu qu'il existait la fonction  
std::mem_fun, mais apparemment elle permet d'appeller une fonction membre  
de Possession dans mon cas...
 
Comment je peux faire ça?
 
Merci d'avance!!

Reply

Marsh Posté le 12-12-2003 à 21:32:06   

Reply

Marsh Posté le 13-12-2003 à 00:09:58    

Soit tu passe tot en methode de classe, soit tu utilise mem_fun :
 
for_each(v.begin(),v.end(),mem_fun(A::toto)); si je ne m'abuse.

Reply

Marsh Posté le 13-12-2003 à 00:20:19    

non, ça va pas marcher là. précices ce que tu veux faire là.

Reply

Marsh Posté le 13-12-2003 à 00:30:59    

bah t'as eu des réponses sur fclc++ et même une démo de boost.

Reply

Marsh Posté le 13-12-2003 à 00:44:26    

Yep, merci de vos réponses quand même... ;)
 
Pour ceux que ça pourrait intéresser:
 

Code :
  1. for_each(v_poss.begin(),v_poss.end(),boost::bind(&A::toto, this, _1));


 
Je n'ai pas cherché, mais à quoi sert le _1 en troisième argument de boost::bind()?


Message édité par haazheel le 13-12-2003 à 00:46:14
Reply

Marsh Posté le 13-12-2003 à 00:47:29    

y a bien d'autres méthodes tout en restant dans std
 
quitte à passer en boost, j'aurais fait
 

Code :
  1. #include <boost/functional.hpp>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <string>
  5. struct Greeter
  6. {
  7.   Greeter(const std::string &n)
  8.     : name(n)
  9.   {}
  10.   void hello(const std::string &s) const
  11.   {
  12.     std::cout << this->name << " dit bonjour à " << s << '\n';
  13.   }
  14.   const std::string name;
  15. };
  16. int main()
  17. {
  18.  
  19.   const std::string tab[] = {"Porcinet", "Bouriquet", "Tigrou"};
  20.   Greeter g("Taz" );
  21.   std::for_each(tab, tab + sizeof tab / sizeof *tab, boost::bind1st(boost::mem_fun_ref(&Greeter::hello), g));
  22. }

Reply

Marsh Posté le 13-12-2003 à 00:49:13    

(ici on utilise le bind1st de boost, car le std::bind1st est limité et n'a pas de version correcte pout des fonctor const, STL à des limitations de ce côté dans sa version actuelle, boost/functional.hpp propose le complément, même sémantique, ceci sera phagocyté dans std bientôt)

Reply

Marsh Posté le 13-12-2003 à 00:54:35    

Je sens que je vais me faire taper sur les doigts, mais j'ai pas mon bouquin à proximité:
 
c'est quoi exactement un fonctor?

Reply

Marsh Posté le 13-12-2003 à 00:55:46    

objet fonction

Reply

Marsh Posté le 13-12-2003 à 01:03:37    

Ah ok, je me souviens avoir lu ça...
 
Il faudra que j'y rejette un oeil...

Reply

Sujets relatifs:

Leave a Replay

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