Bonjour,

après avoir parcourus la Faq et étudié l'utilisation de bind2nd et bind1st qui y est décrite ainsi que mon Stroustrup, j'ai essayer de bien cerner le fonctionnement de ces deux outils.
Je bloque sur ce qui me semble être un cas d'école :

J'essaye de ré-écrire une fonction simple et qui me satisfait déjà mais à l'aide des opérateurs de <functionnal.h>

Voici ma fonction :
Elle est membre de la classe "messages" qui hérite de std::list<coMsg*>
"nombre" est un typedef de nombre à virgule, et "uint" un typedef d'entier strictement positif. "sens" est un "uint". La fonction intervient dans le calcul d'une probabiltée sans interet ici :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
nombre CalculPi(sens categorie)
{
        uint compteur = 0;
        for(messages::iterator i = begin(); i != end(); i++)
            if ((*i)->GetCat() == categorie)
                compteur++;
 
        if (size() == 0)
            return 0.;
        return ((nombre)compteur / (nombre)size());
}
J'ai donc tenté de la ré-écrire la boucle de calcul avec le module <fonctionnal.h> comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
        ptrdiff_t c =
            std::count_if(begin(),end(),
                std::bind2nd(
                    std::bind1st(std::equal_to<sens>(),
                                 categorie
                    ),
                    std::mem_fun(&coMsg::GetCat)
                )
            );
Je ne cherche pas l'éfficacité en ligne de code mais juste à bien comprendre le fonctionnement de la stl sur ce module.
Le problème... c'est que ca ne marche pas du tout, malgré les messages d'erreurs du compilateur je ne parviens pas à trouver comment disposer les fonctions pour re-créer l'équivalent de ma boucle si dessus.

Ce qui fonctionnellement s'écrirais comme ceci en ocaml :
" fold_left (fun r x -> if categorie = CoMsg.getCat x then r else succ r) 0 "
comment je peu l'écrire en C++ avec les fonctions du module <fonctionnal.h>


Est ce que vous pourriez m'aider à trouver comment disposer les fonctions pour recréer correctement ma petite boucle ?

Merci d'avance pour votre aide.