OVH Cloud OVH Cloud

boost:function

14 réponses
Avatar
guillaume
bonjour,

j utilise actuellement boost::function/boost::bind. j aimerais savoir
si il est possible de faire quelque chose de semblable juste avec la
STL:

boost::function<int (int)> foo;
boost::function<int (int)> bar;
foo = boost::bind(&Test::foo,
&test,
_1);

bar = std::bind1st(std::mem_fun(&Test::foo),
&test);

std::cout << foo(41) << std::endl;
std::cout << bar(41) << std::endl;

donc concretement j aimerais remplacer le boost::function<in (int)> par
quelque chose de standard...

merci par avance,

--
Guillaume Desticourt

10 réponses

1 2
Avatar
Stephane Wirtel
Pourquoi réimplémenter ces outils via la STL ?
Avatar
loufoque

j utilise actuellement boost::function/boost::bind. j aimerais savoir
si il est possible de faire quelque chose de semblable juste avec la
STL:


Tu prends les sources et tu les copies.
Boost.Function est écrit en C++ standard.

Avatar
guillaume
parce moins ma lib a de dependances, plus elle a de chance d etre
utilisee, et moins elle a de chances d avoir de probleme de
portabilites, et plus elle est facilement deployable. concretement si j
utilise juste la STL, je prends mon code et je tape make, sinon je
commence par installer x dependances, en admettant que je sois autorise
a le faire :)
de plus je ne veux rien reimplementer, je veux utiliser la STL
ma question etait: est il possible de faire ca avec la STL?

--
Guillaume Desticourt
Avatar
guillaume
Tu prends les sources et tu les copies.

donc je ne beneficierais plus des mises a jours de la lib, bof, si
vraiment je ne peux pas avoir ma solution avec c++/STL j utiliserai
boost, mais pas de cette maniere...

Boost.Function est écrit en C++ standard.

ultimatetrader% grep -r @#ifdef /usr/include/boost/*
/usr/include/boost/type_traits/detail/is_function_ptr_tester.hpp:@#ifdef
BOOST_TT_TEST_MS_FUNC_SIGS

c est quel standard ce @#ifdef?

--
Guillaume Desticourt
Avatar
Stephane Wirtel
guillaume said the following on 15/02/2006 18:26:
parce moins ma lib a de dependances, plus elle a de chance d etre
utilisee, et moins elle a de chances d avoir de probleme de
portabilites, et plus elle est facilement deployable. concretement si j
utilise juste la STL, je prends mon code et je tape make, sinon je
commence par installer x dependances, en admettant que je sois autorise
a le faire :)
de plus je ne veux rien reimplementer, je veux utiliser la STL
ma question etait: est il possible de faire ca avec la STL?
1) Il y a plusieurs implémentations de la STL, laquelle emplois-tu ?

Sachant que certaines implémentations ont des extensions :p style std::compose1

2) La boost est bien mieux testé que ton implémentation qui risque de ne pas
correspondre à 100% à ton attente.

3) Tu es libre de développer et re-développer ce que tu veux, mais si une lib
est bien faite, je trouve qu'une ré-implémentation
est perdu.

Et à moins que je me trompe, boost::function ne demande pas de dépendances
(*.dll, *.so)

Bien à toi

Avatar
Fabien LE LEZ
On 15 Feb 2006 09:33:12 -0800, "guillaume"
:

, bof, si
vraiment je ne peux pas avoir ma solution avec c++/STL j utiliserai
boost


Note en passant que Boost est fait pour être utilisé. Ce n'est pas un
simple exercice théorique.

Avatar
loufoque

ultimatetrader% grep -r @#ifdef /usr/include/boost/*
/usr/include/boost/type_traits/detail/is_function_ptr_tester.hpp:@#ifdef
BOOST_TT_TEST_MS_FUNC_SIGS

c est quel standard ce @#ifdef?


Ah oui apparemment y'a quelques trucs qui varient en fonction du
compilateur.

Avatar
Loïc Joly
bonjour,

j utilise actuellement boost::function/boost::bind. j aimerais savoir
si il est possible de faire quelque chose de semblable juste avec la
STL:

boost::function<int (int)> foo;
boost::function<int (int)> bar;
foo = boost::bind(&Test::foo,
&test,
_1);

bar = std::bind1st(std::mem_fun(&Test::foo),
&test);

std::cout << foo(41) << std::endl;
std::cout << bar(41) << std::endl;

donc concretement j aimerais remplacer le boost::function<in (int)> par
quelque chose de standard...


Il n'y a pas d'équivalent direct aussi flexible, sinon, ça ne serait pas
dans boost... Mais par contre, cette partie de boost a été accepté dans
le TR1 (technical report) du standard, et on devrait donc en trouver un
peu partout dans les compilos à mesure qu'ils se mettent à implémenter
le TR1. L'utiliser est donc à mon sens une solution pérenne.

--
Loïc

Avatar
guillaume
1) Il y a plusieurs implémentations de la STL, laquelle emplois-tu ?
Sachant que certaines implémentations ont des extensions :p style
std::compose1

je ne veux pas utiliser d extensions non standard, cela reduirait la
portabilite de ma lib

2 et 3

je suis d accord, je ne veux rien reimplementer justement, j ai juste
vu que boost::bind pouvait etre remplace par std::bind1st (dans
certains ca) donc je me demandais si, de la meme maniere,
boost::function pouvait etre remplace par un std::xxx

Et à moins que je me trompe, boost::function ne demande pas de
dépendances
il me semble aussi, c est le point positif, mais a nouveau pourquoi
utiliser quelquechose d externe si je peux le faire avec la STL?

ceci dit, d apres la reponse de loic, je comprends que ce n est pas
possible (directement, aussi facilement, etc..)

cordialement,

--
Guillaume Desticourt
Avatar
guillaume
bien sur, je ne sous entendais pas du tout cela!
c est juste une dependance supplementaire...

cordialement,

--
Guillaume Desticourt
1 2