Saistīt funkciju un vietturi C ++

Dažreiz mums ir jāveic manipulācija ar funkcijas darbību atbilstoši vajadzībām, t.i., dažu argumentu mainīšana uz noklusējuma gadījumā utt. noklusējuma argumenti Ierobežo funkcijas daudzpusību un liek mums izmantot noklusējuma argumentus, un tas arī ar līdzīgām vērtībām katru reizi. Sākot ar C ++ 11, BIND funkcijas ieviešana ir atvieglojusi šo uzdevumu. 

Kā darbojas saistīšanās ()?  

Saistības funkcija ar vietturu palīdzību palīdz manipulēt ar vērtību stāvokli un skaitu, kas jāizmanto funkcijā, un modificē funkciju atbilstoši vēlamajai izvadei. 

Kas ir vietturi?  

Vietiņas ir nosaukumvietas, kas funkcijā norāda vērtības pozīciju. Tos pārstāv _1 _2 _3 ... 

Piemērs:

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

Izlaide:

5 -11 

Iepriekš minētajā kodā BIND () modificēja funkcijas izsaukumu, lai ņemtu 1 argumentu un atgrieztu vēlamo izvadi. 

Vietturu īpašības

1. Vietiņas pozīcija nosaka vērtības pozīciju funkcijas zvana paziņojumā 

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

Izlaide:

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

Iepriekš minētajā kodā, kaut arī 1 un 13 pozīcija bija vienāda ar funkciju izsaukumu, mainīja vietiņu stāvokļa izmaiņas, mainīja funkcijas izsaukšanas veidu.   

2. Vietnieku skaits nosaka argumentu skaitu, kas nepieciešami funkcijā.

Mēs varam izmantot jebkuru nē. vietturi Funkcijas izsaukuma paziņojumā (acīmredzami mazāk nekā maksimālais argumentu skaits). Atpūtas vērtības tiek aizstātas ar lietotāja noteiktām noklusējuma vērtībām. 

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

Izlaide:

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 

Iepriekš minētajā kodā skaidri Nr. vietturi, kas pielīdzināti argumentu skaitam, kas nepieciešams, lai izsauktu funkciju. Funkcijas saistīšanos nosaka vietturu skaits un pozīcija.