logo

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į. 



kaip konvertuoti char į eilutę

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:

„Java“ eilutėje yra
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. 

java lambda išraiškos