Surišti funkciją ir vietos žymeklius C ++

Kartais mums reikia manipuliuoti funkcijos veikimu pagal poreikį, t. Y. Pakeisti kai kuriuos argumentus į numatytąjį ir pan. Numatytieji argumentai Apriboja funkcijos universalumą ir verčia mus naudoti numatytuosius argumentus, taip pat su panašiomis vertėmis kiekvieną kartą. Nuo „C ++ 11“ įvedimas į „Bind“ funkciją palengvino šią užduotį. 

Kaip veikia Bind ()?  

Įriškite funkciją naudodamiesi vietos žymekliais, padeda manipuliuoti funkcijos naudojamos verčių padėtimi ir skaičiumi ir modifikuoti funkciją pagal norimą išvestį. 

Kas yra vietos žymekliai?  

Vietos žymekliai yra vardų erdvės, nukreipiančios vertės padėtį funkcijoje. Juos atstovauja _1 _2 _3 ... 

Pavyzdys:

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

Išvestis:

5 -11 

Aukščiau pateiktame kode Bind () pakeitė funkcijos skambutį paimti 1 argumentą ir grąžino norimą išvestį. 

Vietos žymeklių savybės

1. Vietos žymeklio padėtis nustato vertės padėtį funkcijos skambučio teiginyje 

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

Išvestis:

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

Aukščiau pateiktame kode, net jei 1 ir 13 padėtis buvo vienoda funkcijos skambučio metu. Pakeitus vietos žymeklių padėtį, pakeitė funkcijos skambučio būdą.   

2. Vietos žymeklių skaičius nustato argumentų, reikalingų funkcijai perduoti, skaičių.

Mes galime naudoti bet kurį ne. Funkcijos skambučio pareiškimo vietų žymeklių (akivaizdu, kad mažiau nei maksimalus argumentų skaičius). Likusias vertes pakeičia vartotojo apibrėžtos numatytosios vertės. 

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

Išvestis:

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 

Aukščiau pateiktame kode aiškiai ne. vietų žymeklių prilygsta argumentų, reikalingų funkcijai vadinti, skaičiumi. Funkcijos surišimą vadovauja vietos žymeklių skaičius ir padėtis.