Forum Programmation.c++ std::bind: réduire les arguments

Posté par . Licence CC By‐SA.
Étiquettes : aucune
1
13
déc.
2019

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 . É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.