Bonjour,
J’ai un système d’interface avec une fonction contenant 2 arguments, je voudrais envoyer vers une fonction avec 1 seul argument. Je sais le faire avec une lambda, mais y a t’il une possibilité avec std::bind
. Je prends l’exemple pour add
et mult
.
#include <iostream>
#include <functional>
int record_callback(std::function<int(int,int)> callback,int a, int b)
{
// Real code here.
return callback(a,b);
}
/* a+b*c */
int formule(int a, int b, int c)
{
return a+b*c;
}
int id (int a)
{
return a;
}
int main()
{
// a + b * 1 == a + b
auto add = std::bind(formule,std::placeholders::_1,std::placeholders::_2,1);
// 0 + b * c == b * c
auto mult = std::bind(formule,0,std::placeholders::_1,std::placeholders::_2);
// Comment définir avec std::bind ?
//auto add0_or_mult1 = std::bind(id,std::placeholders::_1,???);
// Implémentation avec lambda
auto add0_or_mult1 = [](int a, int b){return id(a);};
int a=2;
int b=3;
std::cout << "add(a,b) = " << add(a,b) << std::endl;
std::cout << "mult(a,b) = " << mult(a,b) << std::endl;
std::cout << "add0_or_mult1(a,b) = " << add0_or_mult1(a,b) << std::endl;
std::cout << "add(a,b) = " << record_callback(add,a,b) << std::endl;
return 0;
}
Je n’ai finalement utilisé la fonction record_callback
qu’une fois dans l’exemple. Mais voilà, je voudrais pouvoir définir add0_or_mult1
en utilisant std::bind
plutôt que la lambda.
Y-a-t’il une solution ?
# Non, pas possible.
Posté par Anthony Jaguenaud . Évalué à 3.
Vu le nombre de réponse après 5 jours, j’en déduis que ce n’est pas possible avec
std::bind
et que la bonne solution est donc bien la lambda.Merci.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.