 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Michel Michaud Guest
|
Posted: Wed Jul 09, 2003 6:11 pm Post subject: Re: bind, mem_fun_ref |
|
|
Dans news:RJYOa.13663$Tx.644048 (AT) news20 (DOT) bellglobal.com, Michel
Michaud <mm (AT) gdzid (DOT) com> a écrit :
| Quote: | La solution est d'employer [] mais plutôt find, mais il n'y a pas
|
La solution est d'employer find au lieu de [], mais il n'y a pas
[...]
--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
Benoit Dejean Guest
|
Posted: Wed Jul 09, 2003 6:37 pm Post subject: Re: bind, mem_fun_ref |
|
|
Le Wed, 09 Jul 2003 13:59:09 -0400, Michel Michaud a écrit :
| Quote: | Je voyais plusieurs problèmes et je me suis amusé à essayer d'obtenir
ce que tu sembles désirer. Les deux problèmes de base d'abord :
- ostream_iterator devrait être <unsigned>;
|
je m'en suis aperçu plus tard, en reformatant également le code
| Quote: | - operator[] n'existe pas pour un map constant (car il doit
ajouter si non trouvé). Dans ton code, il y a des const qui sont
ajoutés même si tu ne les vois pas (le paramètre de bind1st est
passé par référence constante), alors tu ne peux pas utiliser []
pour simplement trouver les valeurs associées.
|
ça aussi j'ai trouvé
| Quote: | La solution est d'employer [] mais plutôt find, mais il n'y a pas ce
qu'il faut dans les binder et adaptateur pour pouvoir obtenir le
résultat sans écrire du code supplémentaire (il existe peut-être
quelque chose chez boost). Par exemple, on pourrait faire :
|
[...] j'ai fais le même genre de chose pour m'en sortir
| Quote: | Il y a plusieurs autres possibilités du genre, mais il faut écrire un
peu de code (ou bien chercher chez boost...).
|
dommage que tu n'es pas répondu à mon message plus tôt, ça m'aurait
éviter de tourner un rond. merci pour tes explications détaillées. par
contre je n'ai pas pensé à regarder chez boost. merci de ton aide
--
"Ne perdez pas de vue qu'un programme rapide et incorrect est d'une utilité presque nulle."
Ce qui est loin d'être incompatible avec la notion d'Art.
|
|
| Back to top |
|
 |
Benoit Dejean Guest
|
Posted: Wed Jul 09, 2003 6:46 pm Post subject: Re: bind, mem_fun_ref |
|
|
Le Wed, 09 Jul 2003 20:37:18 +0200, Benoit Dejean a écrit : par
| Quote: | contre je n'ai pas pensé à regarder chez boost.
|
il y a exactement ce qu'il faut chez boost, merci pour cette piste
--
"Ne perdez pas de vue qu'un programme rapide et incorrect est d'une utilité presque nulle."
Ce qui est loin d'être incompatible avec la notion d'Art.
|
|
| Back to top |
|
 |
Michel Michaud Guest
|
Posted: Wed Jul 09, 2003 7:02 pm Post subject: Re: bind, mem_fun_ref |
|
|
Dans news:pan.2003.07.09.18.46.51.746024 (AT) ifrance (DOT) com, Benoit
Dejean <bnet (AT) ifrance (DOT) com> a écrit :
| Quote: | Le Wed, 09 Jul 2003 20:37:18 +0200, Benoit Dejean a écrit : par
contre je n'ai pas pensé à regarder chez boost.
il y a exactement ce qu'il faut chez boost, merci pour cette piste
|
Alors pour nous faire plaisir, montre le code que ça donne avec
les trucs de boost...
--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
Benoit Dejean Guest
|
Posted: Wed Jul 09, 2003 7:23 pm Post subject: Re: bind, mem_fun_ref |
|
|
Le Wed, 09 Jul 2003 15:02:13 -0400, Michel Michaud a écrit :
| Quote: | Dans news:pan.2003.07.09.18.46.51.746024 (AT) ifrance (DOT) com, Benoit Dejean
[email]bnet (AT) ifrance (DOT) com[/email]> a écrit :
Le Wed, 09 Jul 2003 20:37:18 +0200, Benoit Dejean a écrit : par
contre je n'ai pas pensé à regarder chez boost.
il y a exactement ce qu'il faut chez boost, merci pour cette piste
Alors pour nous faire plaisir, montre le code que ça donne avec les
trucs de boost...
|
et bien il est très simple. si je reprends l'exemple que j'avais donné,
on arrive naturellement à
transform(keys.begin(), keys.end(),
ostream_iterator<unsigned>(cout, ", "),
boost::bind1st(
boost::mem_fun_ref(&map<string, unsigned>::operator[]),
months)
);
(juste remplacer std par boost)
http://boost.org/libs/functional/index.html
le problème est apparemment bien connu étant donné la signature de ces
fonctions (comme tu l'as fait remarqué)
"The Standard Committee has recognised the problem of references to
references occurring during template instantiation and has moved to fix
the standard (see the C++ standard core language active issues list)."
je donne aussi l'exemple de boost (disponible à l'emplacement donné plus
haut)
/* -*- */
Using these adapters should be pretty much the same as using the standard
function object adapters; the only differences are that you need to write
boost:: instead of std::, and that you will get fewer headaches.
For example, suppose you had a Person class that contained a set_name
function:
class Person
{
public:
void set_name(const std::string &name);
// ...
};
You could rename a bunch of people in a collection, c, by writing
std::for_each(c.begin(), c.end(),
boost::bind2nd(boost::mem_fun_ref(&Person::set_name),
"Fred"));
If the standard adapters had been used instead then this code would
normally fail to compile, because set_name takes a reference argument.
/* -*- */
voilà et merci encore.
--
"Ne perdez pas de vue qu'un programme rapide
et incorrect est d'une utilité presque nulle."
Ce qui est loin d'être incompatible avec la notion d'Art.
|
|
| 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
|
|