logo

C++'da Bağlama İşlevi ve Yer Tutucular

Bazen ihtiyaca göre bir fonksiyonun çalışmasını manipüle etmemiz gerekir; örneğin bazı argümanları varsayılan olarak değiştirmek vb. Bir fonksiyonun önceden tanımlanması varsayılan argümanlar bir fonksiyonun çok yönlülüğünü kısıtlar ve bizi varsayılan argümanları ve onu da her seferinde benzer değerlerle kullanmaya zorlar. C++ 11'den itibaren bağlama fonksiyonunun tanıtılması bu görevi kolaylaştırmıştır. 

Bind() nasıl çalışır?  

Bind işlevi, yer tutucuların yardımıyla, işlev tarafından kullanılacak değerlerin konumu ve sayısının değiştirilmesine yardımcı olur ve işlevi istenen çıktıya göre değiştirir. 



10 ml ne kadar

Yer tutucular nelerdir?  

Yer tutucular, bir değerin bir işlevdeki konumunu yönlendiren ad alanlarıdır. Onlar tarafından temsil edilirler _1 _2 _3 ... 

Örnek:

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

Çıkış:

5 -11

Yukarıdaki kodda bind(), bir fonksiyonun çağrısını 1 argüman alacak şekilde değiştirdi ve istenen çıktıyı döndürdü. 

Yer Tutucuların Özellikleri

1. Yer tutucunun konumu, işlev çağrısı ifadesindeki değer konumunu belirler 

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

Çıkış:

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

Yukarıdaki kodda, bir işlev çağrısında 1 ve 13'ün konumları aynı olmasına rağmen yer tutucuların konumlarındaki değişiklik, işlevin çağrılma şeklini değiştirmiştir.   

2. Yer tutucuların sayısı, işleve iletilmesi gereken bağımsız değişkenlerin sayısını belirler.

Herhangi bir hayır kullanabiliriz. işlev çağrısı ifadesindeki yer tutucuların sayısı (belli ki maksimum bağımsız değişken sayısından daha az). Geri kalan değerler, kullanıcı tanımlı varsayılan değerlerle değiştirilir. 

basit piton programı
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; } 

Çıkış:

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

Yukarıdaki kodda açıkça hayır. işlevi çağırmak için gereken bağımsız değişken sayısına eşit yer tutucu sayısı. Fonksiyonun bağlanması, yer tutucuların sayısı ve konumuna göre yönlendirilir.