OVH Cloud OVH Cloud

bind1st ne marche pas avec les fonction unaires

2 réponses
Avatar
Vincent Lascaux
Bonjour,

J'essaie d'utiliser la librairie de threads de boost. Son constructeur prend
un fonctor "nullaire" (qui n'attent pas d'argument) pour définir le point
d'entrée du thread. Je voudrais que le point d'entrée de mon thread soit une
fonction membre Foo::bar(), sur l'objet this. Je me suis dit que le code
créerait le fonctor unaire kivabien : std::bind1st(std::mem_fun(&Foo::bar),
this).

Mais celà ne compile pas (à juste raison) puisqu'il est indiqué dans la doc
que std::bind1st remplace le premier argument d'un fonctor binaire par la
valeur fournie. Or mon fonctor est unaire...

Pourquoi il n'existe pas une version de bind1st qui accepte un fonctor
unaire (il me semble que ca serait bien utile, mon cas ne doit pas être
isolé) et quel code valide va me créer mon fonctor ?

Merci

--
Vincent

2 réponses

Avatar
Loïc Joly
Bonjour,

J'essaie d'utiliser la librairie de threads de boost. Son constructeur prend
un fonctor "nullaire" (qui n'attent pas d'argument) pour définir le point
d'entrée du thread. Je voudrais que le point d'entrée de mon thread soit une
fonction membre Foo::bar(), sur l'objet this. Je me suis dit que le code
créerait le fonctor unaire kivabien : std::bind1st(std::mem_fun(&Foo::bar),
this).

Mais celà ne compile pas (à juste raison) puisqu'il est indiqué dans la doc
que std::bind1st remplace le premier argument d'un fonctor binaire par la
valeur fournie. Or mon fonctor est unaire...

Pourquoi il n'existe pas une version de bind1st qui accepte un fonctor
unaire (il me semble que ca serait bien utile, mon cas ne doit pas être
isolé) et quel code valide va me créer mon fonctor ?


Quant à utiliser boost, utilise aussi boost::bind qui est bien plus
simple et puissant que bind1st...

--
Loïc

Avatar
Vincent Lascaux
Quant à utiliser boost, utilise aussi boost::bind qui est bien plus simple
et puissant que bind1st...


Effectivement, je m'appercoit de la facilité d'utilisation de boost::bind et
je me demande comment on peut encore utiliser les mem_fun et autre bind1st
et bind2nd de la STL quand on a cet outil :)

Merci pour le tuyaux... Je me demande toujours si ce que je voulais faire
est possible avec la STL uniquement (en fait je suis en train de me dire que
les fonctor ont été introduit pour les algo de la STL et que ces algos
demandent presque tous des fonctors unaires ou binaires, donc peut être
qu'on ne peut pas créer de fonctor "nullaire" avec la STL).

--
Vincent