Eventuali duplicati:
Should templated functions take lambda arguments by value or by rvalue reference?Passare i funtori in base al valore o in C++ 11 Riferimento universale?
Il C++ funzioni della libreria standard prendono funtore (puntatore a funzione o oggetto funzione) argomenti per valore, in questo modo:
template <typename F>
void apply(F func)
{
func();
}
.. . Ma non sarebbe meglio passare i funtori di Universal Reference? In questo modo:
template <typename F>
void apply(F&& func)
{
func();
}
In questo modo si poteva passare oggetti funzione che mantengono lo stato, e avere accesso a questo stato (eventualmente modificato) dopo la funzione di ordine superiore è tornato.
I modelli vengono espansi/risolti al momento della compilazione. Come possono sapere lo stato al momento della compilazione? –
Si noti che con il primo si può sempre usare un reference-wrapper per evitare una copia. –
@Manoj R: volevo dire: hai una variabile oggetto funzione fn_obj, chiami apply (fn_obj), e poi hai accesso a fn_obj.state, che potrebbe essere stato modificato dalla chiamata da applicare – TommiT