Lliga la funció i els marcadors de lloc a C ++

De vegades, hem de manipular el funcionament d’una funció segons la necessitat, és a dir, canviar alguns arguments per defecte, etc. predefinint una funció a tenir Arguments per defecte restringeix la versatilitat d’una funció i ens obliga a utilitzar els arguments predeterminats i també amb valors similars cada vegada. Des de C ++ 11 en endavant la introducció de la funció BIND ha facilitat aquesta tasca. 

Com funciona Bind ()?  

La funció d’unió amb l’ajuda dels marcadors de posició ajuda a manipular la posició i el nombre de valors que s’ha d’utilitzar la funció i modifica la funció segons la sortida desitjada. 

Què són els marcadors de lloc?  

Els marcadors de lloc són espais de noms que dirigeixen la posició d’un valor en una funció. Estan representats per _1 _2 _3 ... 

Exemple:

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

Sortida:

5 -11 

Al codi anterior Bind () va modificar la trucada d'una funció per prendre 1 argument i va retornar la sortida desitjada. 

Propietats dels marcadors

1. La posició del marcador de lloc determina la posició de valor a la declaració de trucada de funció 

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

Sortida:

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

En el codi anterior, tot i que la posició de 1 i 13 era la mateixa en una funció que es truqués el canvi en la posició dels titulars de lloc va canviar la manera de anomenar -se la funció.   

2. El nombre de marcadors de lloc determina el nombre d’arguments necessaris per passar a la funció.

Podem utilitzar qualsevol no. dels propietaris de lloc a la declaració de trucada de funció (òbviament inferior al nombre màxim d’arguments). Els valors de descans es substitueixen pels valors predeterminats definits per l'usuari. 

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

Sortida:

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 

Al codi anterior, clarament el núm. dels propietaris de lloc equiparats al nombre d’arguments necessaris per trucar a la funció. La unió de la funció està dirigida pel nombre i la posició dels marcadors.