logo

Bind-functie en tijdelijke aanduidingen in C++

Soms moeten we de werking van een functie manipuleren op basis van de behoefte, dat wil zeggen het veranderen van enkele argumenten naar de standaardwaarde enz. Het vooraf definiëren van een functie standaardargumenten beperkt de veelzijdigheid van een functie en dwingt ons om de standaardargumenten te gebruiken en dat ook telkens met vergelijkbare waarden. Vanaf C++11 heeft de introductie van de bind-functie deze taak eenvoudiger gemaakt. 

Hoe werkt bind()?  



De Bind-functie met behulp van tijdelijke aanduidingen helpt bij het manipuleren van de positie en het aantal waarden dat door de functie moet worden gebruikt en past de functie aan op basis van de gewenste uitvoer. 

hoeveel vruchten zijn er

Wat zijn tijdelijke aanduidingen?  

Tijdelijke aanduidingen zijn naamruimten die de positie van een waarde in een functie bepalen. Zij worden vertegenwoordigd door _1 _2 _3 ... 



Voorbeeld:

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

Uitgang:

5 -11

In de bovenstaande code wijzigde bind() de aanroep van een functie om 1 argument aan te nemen en de gewenste uitvoer terug te geven. 



Eigenschappen van tijdelijke aanduidingen

1. De positie van de tijdelijke aanduiding bepaalt de waardepositie in de functieaanroepinstructie 

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

Uitgang:

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

Hoewel in de bovenstaande code de posities van 1 en 13 hetzelfde waren in een functieaanroep, veranderde de verandering in de positie van tijdelijke aanduidingen de manier waarop de functie werd aangeroepen.   

2. Het aantal tijdelijke aanduidingen bepaalt het aantal argumenten dat moet worden doorgegeven in de functie.

We kunnen elk nr. van tijdelijke aanduidingen in de functieaanroepinstructie (uiteraard minder dan het maximale aantal argumenten). De rustwaarden worden vervangen door de door de gebruiker gedefinieerde standaardwaarden. 

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

Uitgang:

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

In de bovenstaande code is duidelijk het nee. van tijdelijke aanduidingen gelijk aan het aantal argumenten dat nodig is om de functie aan te roepen. De binding van de functie wordt bepaald door het aantal en de positie van tijdelijke aanduidingen. 

arraylist-methoden