Sitota toiminto ja paikkamerkit C ++: ssa

Joskus meidän on manipuloitava funktion toimintaa tarpeen mukaan, ts. Joidenkin argumenttien muuttaminen oletusarvoon jne. oletusargumentit rajoittaa funktion monipuolisuutta ja pakottaa meidät käyttämään oletusargumentteja ja myös samanlaisilla arvoilla joka kerta. C ++ 11: stä BIND -funktion käyttöönotto on helpottanut tätä tehtävää. 

Kuinka bind () toimii?  

Bind -toiminto paikkamerkkien avulla auttaa manipuloimaan funktion käyttämien arvojen sijaintia ja lukumäärää ja muuttaa funktiota halutun lähdön mukaisesti. 

Mitä ovat paikkamerkit?  

Paikkamerkit ovat nimitilat, jotka ohjaavat funktion arvon sijaintia. Niitä edustaa _1 _2 _3 ... 

Esimerkki:

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

Lähtö:

5 -11 

Yllä olevassa koodissa bind () muokkasi funktion kutsua ottamaan 1 argumentti ja palautti halutun lähdön. 

Paikkamerkkien kiinteistöt

1. Paikkamerkin sijainti määrittää arvon sijainnin funktiopuhelun käskyssä 

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

Lähtö:

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

Yllä olevassa koodissa, vaikka 1 ja 13 -sijainti olivat samat funktiossa, kutsuvat muutosta paikkamerkkien sijainnin muuttamiseksi funktion tapaan.   

2. Paikkamerkkien lukumäärä määrittää toiminnassa edellyttämien argumenttien lukumäärän.

Voimme käyttää mitään. paikkamerkkien funktiopuhelutiedoissa (ilmeisesti vähemmän kuin argumenttien enimmäismäärä). Loput arvot korvataan käyttäjän määrittämillä oletusarvoilla. 

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

Lähtö:

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 

Yllä olevassa koodissa selvästi no. paikkamerkinnät rinnastettiin toiminnon soittamiseen vaadittavien argumenttien lukumäärään. Funktion sitoutuminen ohjaa paikkamerkkien lukumäärä ja sijainti.