URL: https://linuxfr.org/forums/programmation-c/posts/std-bind-reduire-les-arguments Title: std::bind: réduire les arguments Authors: Anthony Jaguenaud Date: 2019年12月13日T14:55:45+01:00 License: CC By-SA Tags: Score: 1 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`. ```c++ #include #include int record_callback(std::function 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 ?

AltStyle によって変換されたページ (->オリジナル) /