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

  FORUM HardWare.fr
  Programmation
  C++

  boost:::bind et ref

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

boost:::bind et ref

n°1875420
Glock 17Pr​o
Posté le 20-04-2009 à 16:47:44  profilanswer
 

Hello,
 
dans la doc de bind il y a cet exemple :
 
 

Code :
  1. struct F2
  2. {
  3.     int s;
  4.     typedef void result_type;
  5.     void operator()( int x ) { s += x; }
  6. };
  7. F2 f2 = { 0 };
  8. int a[] = { 1, 2, 3 };
  9. std::for_each( a, a+3, bind( ref(f2), _1 ) );
  10. assert( f2.s == 6 );


 
Quel est l'intérêt d'utiliser ref ?
 
Merci.

mood
Publicité
Posté le 20-04-2009 à 16:47:44  profilanswer
 

n°1875492
Taz
bisounours-codeur
Posté le 20-04-2009 à 18:25:03  profilanswer
 

essaie sans ?

n°1875533
Glock 17Pr​o
Posté le 20-04-2009 à 19:42:16  profilanswer
 

truc de ouf sans ça marche pas, ça à avoir avec une histoire de copie ?


Message édité par Glock 17Pro le 20-04-2009 à 19:43:26
n°1875603
jesus_chri​st
votre nouveau dieu
Posté le 20-04-2009 à 21:38:17  profilanswer
 

bind stocke ses valeurs bindées par valeur et les passe ensuite à la fonction/foncteur par référence, si cette dernière le supporte.
boost::ref sert à le forcer à stocker ses valeurs bindés par référence.
 
bind( f2, _1 ); // tu bind une copie de f2
bind( ref( f2 ), _1 ); // tu bind une référence vers f2

n°1875661
Glock 17Pr​o
Posté le 21-04-2009 à 03:27:23  profilanswer
 

et pourquoi ça ne marche pas sans le ref alors ici ?

n°1875684
Joel F
Real men use unique_ptr
Posté le 21-04-2009 à 08:47:37  profilanswer
 

Tres certainement parce que F2::operator() n'est pas const

n°1875810
Glock 17Pr​o
Posté le 21-04-2009 à 12:28:30  profilanswer
 

c'est pas plutot l'histoire du constructeur de recopie qui est privé ?
 
 
c'est quoi le soucy en faite avec l'() qui n'est pas const, j'aimerais comprendre


Message édité par Glock 17Pro le 21-04-2009 à 19:07:31
n°1876086
Glock 17Pr​o
Posté le 22-04-2009 à 03:44:31  profilanswer
 

:sleep:

n°1877762
jesus_chri​st
votre nouveau dieu
Posté le 25-04-2009 à 19:16:22  profilanswer
 

Joel F a écrit :

Tres certainement parce que F2::operator() n'est pas const


rien à voir...
Le résultat est différent car dans un cas on accumule sur f2, dans l'autre sur une copie anonyme et temporaire de f2.
F2 est un accumulateur, son opérator() ne peut pas être const.
Sans ref, comme bind travaille sur une copie, f2 n'est pas modifié et f2.s == 0

n°1877763
Glock 17Pr​o
Posté le 25-04-2009 à 19:17:26  profilanswer
 

putain c'était easy, merci


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

  boost:::bind et ref

 

Sujets relatifs
boost:men_fun[boost] make_variant_over et mpl::set -> error
Tableau dynamique BOOSTboost::bind
[php] ldap_bindtree stl boost ??
pointeurs intelligents BoostTests unitaires & GTK, quelle librairie de test ? (boost, gunit ...)
[résolu] Boost + convention d'appel __stdcall ?boost::bind, pourquoi this ne marche pas?
Plus de sujets relatifs à : boost:::bind et ref


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