std::mem_fun et for_each

std::mem_fun et for_each - C++ - Programmation

Marsh Posté le 16-03-2010 à 07:57:22    

Code :
  1. struct Foo
  2. {
  3. bool f(const std::pair<int,std::string> &p)const{return 0;}
  4. };
  5. void main()
  6. {
  7. std::map<int,std::string> var;
  8. var[1]="data1";
  9. var[2]="data2";
  10. Foo obj;
  11. std::for_each( var.begin(), var.end(), std::bind1st( std::mem_fun(&Foo::f), &obj ) );
  12. }


 
où est le problème ?


---------------
.
Reply

Marsh Posté le 16-03-2010 à 07:57:22   

Reply

Marsh Posté le 16-03-2010 à 10:46:16    

ca devrait être une mem_fun1 plutôt, non ?
non, en fait, non ...
 
Je repasse dessus et je réalise seulement maintenant que tu tentes de faire un pointeur sur une fonction qui prend des références en argument. J'imagine qu'à un moment, il tente de prendre une référence sur ton type T déduit (qui, ici, est const std::pair<int, std::string>& ) et ca fait une double référence sur la paire, et ca doit être pour ca que ca casse. Ca doit passer si tu passes ta paire par valeur, et non pas par référence.


Message édité par theshockwave le 16-03-2010 à 12:04:12

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

Marsh Posté le 16-03-2010 à 22:05:40    

mem_fun_ref
std::map<int,std::string>::value_type c'est std::pair<const int,std::string> il me semble.

Reply

Marsh Posté le 16-03-2010 à 23:03:11    

effectivement faut passer par valeur partout , au niveau de std::pair dans f et également au niveau du bind1st et mem_fun_ref aussi bonne complémentarité messieurs  :D


Message édité par Glock 17Pro le 16-03-2010 à 23:07:31

---------------
.
Reply

Marsh Posté le 17-03-2010 à 07:56:21    

ok ou bien juste passage par valeur de std::pair bien vu shock


---------------
.
Reply

Sujets relatifs:

Leave a Replay

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