[C++] for_each, mem_fun ...

for_each, mem_fun ... [C++] - C++ - Programmation

Marsh Posté le 02-08-2004 à 12:10:40    

Soit couleur un objet tq :
 

Code :
  1. struct couleur {
  2. void serialisation_binaire( ofstream& ) const;
  3. }


 
j'ai un 'vecteur' de type couleur
 

Code :
  1. vector<couleur> vect;


 
Je veux sérialiser tous les éléments de mon vecteur.
 
La solution simple
 

Code :
  1. for( vector<couleur>::const_iterator it( vect.begin() ); it != vect.end(); ++it )
  2. (*it).serialisation_binaire( fichier_destination );


 
Comment faire avec un for_each ? J'ai essayé n'importe koi du genre...
 

Code :
  1. void ( couleur::*f )( ofstream& ) const ( &couleur::serialisation_binaire );
  2. for_each( vect.begin(), vect.end(), bind2nd( mem_fun1_t<void,couleur,ofstream&>( f ), fichier_destination ) ); }


 
Une idée pour faire en sorte que cela fonctionne ?


Message édité par xterminhate le 02-08-2004 à 12:18:45

---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 02-08-2004 à 12:10:40   

Reply

Marsh Posté le 02-08-2004 à 12:31:18    

Code :
  1. template<typename T>
  2. class serialize_foreach
  3. {
  4.     ofstream& f;
  5. public:
  6.     serialize_foreach(ofstream& file)
  7.       : f(file)
  8.     {
  9.     }
  10.     void operator () (T &t)
  11.     {
  12.         t.serialisation_binaire(f);
  13.     }
  14. };
  15. for_each(vect.begin(), vect.end(), serialize_foreach<couleur>(fichier_destination));


 
pas testé, mais je verrais bien un truc comme ca.


Message édité par blackgoddess le 02-08-2004 à 12:33:36

---------------
-( BlackGoddess )-
Reply

Marsh Posté le 02-08-2004 à 17:18:18    

Je pense que c'est correct. :)
 
Mais d'apres toi, est il possible de se passer d'une fonction objet pour répondre à mon pb (utilisation de mem_fun et Cie) ?


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 02-08-2004 à 17:20:56    

bof, ça serait mieux avec for_each et brouette. je vous fais ça se coirs

Reply

Marsh Posté le 02-08-2004 à 18:22:46    

Code :
  1. #include <iostream>
  2. struct couleur {
  3.   void serialisation_binaire(std::ostream& os) const
  4.   {
  5.     os << static_cast<const void*>(this) << '\n';
  6.   }
  7. };
  8. #include <vector>
  9. #include <algorithm>
  10. #include <boost/functional.hpp>
  11. int main()
  12. {
  13.   std::vector<couleur> v(10);
  14.   std::for_each(v.begin(), v.end(),
  15.  boost::bind2nd(boost::mem_fun_ref(&couleur::serialisation_binaire), std::cout)
  16.  );
  17. }


 
on a une petite défaillance de la STL (qui est figée), au niveau des référence de référence (essayez avec std:: vous verrez)

Reply

Marsh Posté le 02-08-2004 à 18:38:04    

Effectivement avec std:: cela n'est pas possible. Et merci pour l'exemple. :jap:


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 02-08-2004 à 18:40:31    

pour la sérialisation utilise les o/istream, sinon le jour ou tu veux écire/lire dans autre chose qu'un fichie sur media, t'es foutu

Reply

Marsh Posté le 02-08-2004 à 18:51:39    

Oui bien sur. C'etait un oubli.


---------------
Cordialement, Xterm-in'Hate...
Reply

Sujets relatifs:

Leave a Replay

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