Un semplice esempio che spiega come utilizzare std::bind
è il seguente:Come si può usare std :: bind?
Si supponga di avere una funzione di 3 argomenti: f3 (x, y, z). Vogliamo avere una funzione di 2 argomenti che è definita come: f2(x,y) = f3(x,5,y)
. In C++ possiamo facilmente facciamo con std::bind
:
auto f2 = std::bind(f3, _1, 5, _2);
Questo esempio è chiaro: std::bind
prende una funzione come primo parametro e poi prende n altri argomenti, dove n è il numero di argomenti della funzione viene considerato come primo argomento per std::bind
.
Tuttavia, ho trovato un altro uso di BIND:
void foo(int &x)
{
++x;
}
int main()
{
int i = 0;
// Binds a copy of i
std::bind(foo, i)(); // <------ This is the line that I do not understand.
std::cout << i << std::endl;
}
E 'chiaro che foo
ha un argomento e con std::bind
è stato impostato su i
. Ma perché usiamo un altro paio di parentesi dopo (foo, i)
? E perché non usiamo l'output di std::bind
? Voglio dire, perché non abbiamo auto f = std::bind(foo, i)
?
Che diavolo è "\\\"? –
Doveva essere un commento: // – Roman