¿Pasa los funtores por valor o por C++ 11 Universal Reference?
c++11 functor (1)
Este ya es el caso con algunos algoritmos; por ejemplo, en g++ 4.7.0
:
//stl_algo.h
template<typename _RandomAccessIterator, typename _UniformRandomNumberGenerator>
void
shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
_UniformRandomNumberGenerator&& __g)
{
...
}
Obviamente, es imperativo para cosas como los generadores de números aleatorios. Sin embargo, me imagino que esto se convertirá en algo más común en el tiempo.
Posible duplicado:
¿Deberían las funciones de plantilla tomar argumentos lambda por valor o por referencia de valor?
Las funciones de la biblioteca estándar de C ++ toman los argumentos de functor (puntero de función u objeto de función) por valor, de esta manera
template <typename F>
void apply(F func)
{
func();
}
... ¿Pero no sería mejor pasar los funtores por referencia universal ? Al igual que:
template <typename F>
void apply(F&& func)
{
func();
}
De esta manera, podría pasar objetos de función que mantienen el estado y tener acceso a ese estado (posiblemente modificado) después de que la función de orden superior haya regresado.