Зв'язувати функцію та заповнювачі в C ++

Іноді нам потрібно маніпулювати функцією функції відповідно до потреби, тобто зміна деяких аргументів на за замовчуванням тощо, попередньо визначення функції Аргументи за замовчуванням обмежує універсальність функції і змушує нас використовувати аргументи за замовчуванням, і це теж із подібними значеннями щоразу. З C ++ 11 введення функції BIND полегшило це завдання. 

Як працює Bind ()?  

Функція прив’язки за допомогою заповнювачів допомагає маніпулювати положенням та кількістю значень, які будуть використовуватися функцією, і змінює функцію відповідно до потрібного виходу. 

Що таке заповнювачі?  

Власники - це простори імен, які спрямовують позицію значення у функції. Вони представлені _1 _2 _3 ... 

Приклад:

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

Вихід:

5 -11 

У наведеному вище code bind () модифікував виклик функції, щоб взяти 1 аргумент і повернув потрібний вихід. 

Властивості заповнювачів

1. Позиція заповнювача визначає позицію значення у операторі виклику функції 

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

Вихід:

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

У наведеному вище коді, навіть якщо положення 1 і 13 були однаковими у функції, викликаючи зміну положення заповнювачів, змінили спосіб виклику функції.   

2. Кількість заповнювачів визначає кількість аргументів, необхідних для передачі функції.

Ми можемо використовувати будь -який ні. заповнювачів у звіті про виклик функції (очевидно, менше максимальної кількості аргументів). Значення відпочинку замінюються визначеними користувачем значеннями за замовчуванням. 

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

Вихід:

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 

У наведеному вище коді немає ні. заповнювачі прирівнювали до кількості аргументів, необхідних для виклику функції. Зв'язування функції спрямована за кількістю та положенням заповнювачів.