A volte abbiamo bisogno di manipolare il funzionamento di una funzione in base alle necessità, ad esempio cambiando alcuni argomenti in default, ecc. Predefinire una funzione da avere argomenti predefiniti limita la versatilità di una funzione e ci costringe a utilizzare gli argomenti predefiniti e anche quelli con valori simili ogni volta. Da C++11 in poi l'introduzione della funzione bind ha reso questo compito più semplice.
Come funziona bind()?
La funzione Associa con l'aiuto dei segnaposto aiuta a manipolare la posizione e il numero di valori da utilizzare dalla funzione e modifica la funzione in base all'output desiderato.
minimo Massimo
Cosa sono i segnaposto?
I segnaposto sono spazi dei nomi che dirigono la posizione di un valore in una funzione. Sono rappresentati da _1 _2 _3 ...
Esempio:
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; }
Produzione:
5 -11
Nel codice precedente bind() ha modificato la chiamata di una funzione per accettare 1 argomento e ha restituito l'output desiderato.
Proprietà dei segnaposto
1. La posizione del segnaposto determina la posizione del valore nell'istruzione di chiamata della funzione
ml in onceCPP
// 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; }
Produzione:
The value of function is : 10 The value of function after changing placeholder position is : -14
Nel codice sopra, anche se la posizione di 1 e 13 era la stessa in una chiamata di funzione, la modifica nella posizione dei segnaposto ha cambiato il modo in cui veniva chiamata la funzione.
2. Il numero di segnaposto determina il numero di argomenti richiesti da passare nella funzione.
Possiamo usare qualsiasi n. di segnaposto nell'istruzione di chiamata della funzione (ovviamente inferiore al numero massimo di argomenti). I valori rimanenti vengono sostituiti dai valori predefiniti definiti dall'utente.
matrice di stringhe di codici cCPP
// 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; }
Produzione:
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
Nel codice sopra chiaramente il n. di segnaposto equivalgono al numero di argomenti richiesti per chiamare la funzione. L'associazione della funzione è diretta dal numero e dalla posizione dei segnaposto.