Powiel możliwe:
Should templated functions take lambda arguments by value or by rvalue reference?Przekazywanie funktorów według wartości lub według uniwersalnego odwołania C++ 11?
C++ standardowe funkcje biblioteczne wziąć funktor (wskaźnik funkcji lub obiekt funkcyjny) argumentów przez wartość, tak jak poniżej:
template <typename F>
void apply(F func)
{
func();
}
.. Ale czy nie byłoby lepiej przekazać funktory przez Universal Reference? Tak:
template <typename F>
void apply(F&& func)
{
func();
}
ten sposób można przekazać obiekty funkcyjne, które utrzymują stan i mieć dostęp do tego (ewentualnie zmodyfikowanego) Stan po funkcja wyższego rzędu powrócił.
Szablony są rozwijane/rozwiązywane podczas kompilacji. Skąd mogą wiedzieć o stanie w czasie kompilacji? –
Należy pamiętać, że przy pierwszym użyciu zawsze można użyć opakowania referencyjnego, aby uniknąć kopiowania. –
@Manoj R: Miałem na myśli: Masz zmienną obiektu funkcji fn_obj, wywołujesz funkcję fn_obj, a następnie masz dostęp do pliku fn_obj.state, który mógł zostać zmodyfikowany przez wywołanie do zastosowania – TommiT