C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Re: bind, mem_fun_ref

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Michel Michaud
Guest





PostPosted: Wed Jul 09, 2003 6:11 pm    Post subject: Re: bind, mem_fun_ref Reply with quote



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





PostPosted: Wed Jul 09, 2003 6:37 pm    Post subject: Re: bind, mem_fun_ref Reply with quote



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





PostPosted: Wed Jul 09, 2003 6:46 pm    Post subject: Re: bind, mem_fun_ref Reply with quote



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





PostPosted: Wed Jul 09, 2003 7:02 pm    Post subject: Re: bind, mem_fun_ref Reply with quote

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





PostPosted: Wed Jul 09, 2003 7:23 pm    Post subject: Re: bind, mem_fun_ref Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.