logo

Kötés a funkció és a helyőrzők c ++ -ban

Időnként manipulálnunk kell egy függvény működését az igény szerint, azaz néhány argumentumot alapértelmezett értékre változtatni stb. alapértelmezett érvek korlátozza egy függvény sokoldalúságát, és arra készteti bennünket, hogy használjuk az alapértelmezett érveket, és ezt is hasonló értékekkel. A C ++ 11 -től kezdve a kötési funkció bevezetése megkönnyítette ezt a feladatot. 

Hogyan működik a Bind ()?  

Bind funkció a helyőrzők segítségével segít manipulálni a függvény által használt helyzet és az értékek számát, és a függvényt a kívánt kimenetnek megfelelően módosítja. 



könyvtár átnevezése linuxon

Mik azok a helyőrzők?  

A helyőrzők olyan névterek, amelyek irányítják az érték helyzetét egy függvényben. Képviselik őket _1 _2 _3 ... 

Példa:

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; } 

Kimenet:

hogyan kell újra csinálni a Photoshopban
5 -11

A fenti kódban a kötés () módosította egy függvény hívását, hogy 1 argumentumot vegyen, és visszaküldte a kívánt kimenetet. 

A helyőrzők tulajdonságai

1. A helyőrző pozíciója meghatározza az értékpozíciót a függvényhívás nyilatkozatában 

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; } 

Kimenet:

The value of function is : 10 The value of function after changing placeholder position is : -14

A fenti kódban annak ellenére, hogy az 1 és a 13. helyzet azonos volt egy függvény hívásában, a helyőrzők helyzetének változása megváltoztatta a funkció meghívásának módját.   

2. A helyőrzők száma meghatározza a funkció átadásához szükséges érvek számát.

Használhatunk bármilyen no -t. a helyőrzők a funkcióhívás -nyilatkozatban (nyilvánvalóan kevesebb, mint az argumentumok maximális száma). A többi értéket a felhasználó által meghatározott alapértelmezett értékek helyettesítik. 

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; } 

Kimenet:

rr algoritmus
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

A fenti kódban egyértelműen a nem. a funkció felhívásához szükséges érvek számával megegyező helyőrzők. A funkció kötődését a helyőrzők száma és helyzete irányítja.