 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Stephane Wirtel Guest
|
Posted: Fri Feb 10, 2006 12:06 am Post subject: Travailler avec std::for_each et std::vector< boost::shared_ |
|
|
Bonsoir,
J'ai un léger soucis de conception, ou tout simplement de compréhension.
Voici le problème que je recontre.
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <stdexcept>
#include <exception>
#include <boost/shared_ptr.hpp>
#include <libxml/xmlwriter.h>
#include <libxml/encoding.h>
struct People {
std::string firstname;
std::string lastname;
void toXml (xmlTextWriter *xmlWriter);
};
void People::toXml (xmlTextWriter *xmlWriter) {
// ecrire le contenu de la structure Person dans le flux Xml.
}
typedef boost::shared_ptr< People > PeoplePtr;
typedef std::vector< PeoplePtr > Peoples;
int main (int argc, char **argv) {
try {
xmlTextWriterPtr xmlWriter( 0 );
Peoples peoples;
peoples.push_back( PeoplePtr( new People("Stephane", "Wirtel")));
xmlWriter = ...
/// Question 1
std::for_each(
peoples.begin(),
peoples.end(),
???? );
}
catch ( const std::exception & ex ) {
std::cerr << "Exception : " << ex.what() << std::endl;
}
catch (...) {
std::cerr << "Exception inconnue" << std::endl;
}
}
Question 1 :
En fait, j'ai regardé du côté de std::mem_fun, mais je n'ai pas trouvé
la manière de pouvoir utiliser std::for_each, pour que chaque élément
puisse être envoyé dans le flux XML.
Ce qui est plus simple c'est le code suivant :
Peoples::const_iterator it = peoples.begin();
Peoples::const_iterator ending = peoples.end();
for (; it != ending; ++it) {
(*it)->toXml (xmlWriter);
}
mais ce code ne me plait pas :'(
Est-ce quelqu'un aurait une idée pour m'améliorer ?
Si une solution existe, aurait-on la possibilité de m'expliquer la
solution pour une meilleure compréhension ?
Merci beaucoup
Bien à vous,
Stéphane |
|
| Back to top |
|
 |
Stephane Wirtel Guest
|
Posted: Fri Feb 10, 2006 12:06 am Post subject: Re: Travailler avec std::for_each et std::vector< boost::sha |
|
|
| Quote: | struct People {
std::string firstname;
std::string lastname;
J'ai oublié le constructeur : |
People( const std::string & pFirstname,
const std::string & pLastname ) : firstname( pFirstname ), lastname (pLastname) {
}
| Quote: |
void toXml (xmlTextWriter *xmlWriter);
};
|
Merci |
|
| Back to top |
|
 |
Cyrille Guest
|
Posted: Fri Feb 10, 2006 4:06 pm Post subject: Re: Travailler avec std::for_each et std::vector< boost::sha |
|
|
Stephane Wirtel a écrit :
| Quote: |
mais ce code ne me plait pas :'(
Est-ce quelqu'un aurait une idée pour m'améliorer ?
Si une solution existe, aurait-on la possibilité de m'expliquer la
solution pour une meilleure compréhension ?
|
Si PeoplePtr était un (People *), alors on pourrait écrire:
std::for_each(
peoples.begin(),
peoples.end(),
std::bind2nd( std::mem_fun( &People::toXml ), xmlWriter ) );
Mais avec un boost::shared_ptr, ça ne fonctionne pas. A ce moment-là
j'utiliserais plutôt:
std::for_each(
peoples.begin(),
peoples.end(),
boost::bind( &People::toXml, _1, xmlWriter ) ); |
|
| Back to top |
|
 |
Stephane Wirtel Guest
|
Posted: Tue Feb 14, 2006 9:06 am Post subject: Re: Travailler avec std::for_each et std::vector< boost::sha |
|
|
Merci Cyrille,
Stef |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|