Quel est l'avantage de std::function<T1(T2)>
par rapport à l'original T1 (*)(T2)
?
Réponses
Trop de publicités?std::function
peut contenir plus que des pointeurs de fonction, à savoir foncteurs .
#include <functional>
void foo(double){}
struct foo_functor{
void operator()(float) const{}
};
int main(){
std::function<void(int)> f1(foo), f2((foo_functor()));
f1(5);
f2(6);
}
Comme le montre l'exemple, il n'est pas non plus nécessaire d'avoir exactement la même signature, pour autant qu'elles soient compatible (c'est-à-dire le type de paramètre de std::function
peuvent être passés à la fonction / au foncteur contenu).
Outre l'aspect plus propre et une syntaxe plus descriptive, std::function
peut stocker n'importe quel Appelable objet :
- fonctions
- expressions lambda
- lier les expressions
- foncteurs
Sans compter que le stockage, la copie et la liaison d'objets aux fonctions membres sont beaucoup plus faciles et plus intuitifs.