Viazajte funkciu a zástupné symboly v C ++
Niekedy potrebujeme manipulovať s prevádzkou funkcie podľa potreby, t. predvolené argumenty Obmedzuje univerzálnosť funkcie a núti nás používať predvolené argumenty a to aj s podobnými hodnotami zakaždým. Od C ++ 11 sa zavedenie funkcie väzby uľahčilo túto úlohu.
Ako funguje Bind ()?
Funkcia väzby pomocou zástupných symbolov pomáha manipulovať s polohou a počtom hodnôt, ktoré sa majú použiť funkciou, a modifikuje funkciu podľa požadovaného výstupu.
Čo sú zástupné symboly?
Zákonné symboly sú menné priestory, ktoré nasmerujú polohu hodnoty vo funkcii. Sú zastúpené _1 _2 _3 ...
Príklad:
CPP // C++ code to demonstrate bind() and // placeholders #include #include // for bind() using namespace std ; // for placeholders using namespace std :: placeholders ; // Driver function to demonstrate bind() void func ( int a int b int c ) { cout < < ( a - b - c ) < < endl ; } int main () { // for placeholders using namespace std :: placeholders ; // Use of bind() to bind the function // _1 is for first parameter and assigned // to 'a' in above declaration. // 2 is assigned to b // 3 is assigned to c auto fn1 = bind ( func _1 2 3 ); // 2 is assigned to a. // _1 is for first parameter and assigned // to 'b' in above declaration. // 3 is assigned to c. auto fn2 = bind ( func 2 _1 3 ); // calling of modified functions fn1 ( 10 ); fn2 ( 10 ); return 0 ; }
Výstup:
5 -11
Vo vyššie uvedenom kóde zväzok () upravil volanie funkcie tak, aby vzal 1 argument a vrátil požadovaný výstup.
Vlastnosti zástupných symborov
1. Poloha zástupného symbolu určuje hodnotovú pozíciu vo výpise volania funkcie
CPP // C++ code to demonstrate placeholder // property 1 #include #include // for bind() using namespace std ; // for placeholders using namespace std :: placeholders ; // Driver function to demonstrate bind() void func ( int a int b int c ) { cout < < ( a - b - c ) < < endl ; } int main () { // for placeholders using namespace std :: placeholders ; // Second parameter to fn1() is assigned // to 'a' in fun(). // 2 is assigned to 'b' in fun // First parameter to fn1() is assigned // to 'c' in fun(). auto fn1 = bind ( func _2 2 _1 ); // calling of function cout < < 'The value of function is : ' ; fn1 ( 1 13 ); // First parameter to fn2() is assigned // to 'a' in fun(). // 2 is assigned to 'b' in fun // Second parameter to fn2() is assigned // to 'c' in fun(). auto fn2 = bind ( func _1 2 _2 ); // calling of same function cout < < 'The value of function after changing' ' placeholder position is : ' ; fn2 ( 1 13 ); return 0 ; }
Výstup:
The value of function is : 10 The value of function after changing placeholder position is : -14
Vo vyššie uvedenom kóde, aj keď poloha 1 a 13 bola vo funkcii rovnaká, volala zmena v pozícii zástupných symbolov zmenky spôsobu, akým sa funkcia nazývala.
2. Počet zástupných symbolov určuje počet argumentov potrebných na odovzdanie funkcie.
Môžeme použiť ľubovoľné nie. zástupných symbolov vo vyhlásení o volaní (samozrejme menej ako maximálny počet argumentov). Zvyškové hodnoty sa nahradia predvolenými hodnotami definovanými používateľom.
CPP // C++ code to demonstrate placeholder // property 2 #include // for bind() #include using namespace std ; // for placeholders using namespace std :: placeholders ; // Driver function to demonstrate bind() void func ( int a int b int c ) { cout < < ( a - b - c ) < < endl ; } int main () { // for placeholders using namespace std :: placeholders ; // 1 placeholder auto fn1 = bind ( func _1 2 4 ); // calling of function with 1 argument cout < < 'The value of function with 1 ' 'placeholder is : ' ; fn1 ( 10 ); // 2 placeholders auto fn2 = bind ( func _1 2 _2 ); // calling of function with 2 arguments cout < < 'The value of function with 2' ' placeholders is : ' ; fn2 ( 13 1 ); // 3 placeholders auto fn3 = bind ( func _1 _3 _2 ); // calling of function with 3 arguments cout < < 'The value of function with 3 ' 'placeholders is : ' ; fn3 ( 13 1 4 ); return 0 ; }
Výstup:
The value of function with 1 placeholder is : 4 The value of function with 2 placeholders is : 10 The value of function with 3 placeholders is : 8
Vo vyššie uvedenom kóde jasne č. Zásadných symbolov sa rovnalo počtu argumentov potrebných na volanie funkcie. Väzba funkcie je riadená počtom a pozíciou zástupných symbolov.