logo

Свързване на функцията и заместителите в C ++

Понякога трябва да манипулираме работата на дадена функция според необходимостта, т.е. промяна на някои аргументи по подразбиране и т.н. Предварително определяне на функция, за да има аргументи по подразбиране ограничава гъвкавостта на дадена функция и ни принуждава да използваме аргументите по подразбиране и това също с подобни стойности всеки път. От C ++ 11 нататък въвеждането на функцията за свързване направи тази задача по -лесна. 

Как работи Bind ()?  



Свързване на функцията с помощта на заместителите помага да се манипулира позицията и броя на стойностите, които да бъдат използвани от функцията и да променят функцията според желания изход. 

централно изображение в css

Какво представляват задържателите?  

Заплащащите са пространства от имена, които насочват позицията на стойност във функция. Те са представени от _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

В горния код bind () промени призива на функция, за да вземе 1 аргумент и върна желания изход. 



Свойства на заместителите

1. Позицията на замествателя определя стойността на позицията в оператора за повикване на функцията 

ml до oz
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. Броят на заместителите определя броя на аргументите, необходими за преминаване във функцията.

Можем да използваме никакви не. на заместителите във функционалния изявление за повикване (очевидно по -малко от максималния брой аргументи). Останалите стойности се заменят от дефинираните от потребителя стойности по подразбиране. 

хванете и опитайте java
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

В горния код ясно не. на заместителите, приравнени на броя на аргументите, необходими за извикване на функцията. Обвързването на функцията се насочва от броя и позицията на заместителите.