Espacios de nombres
Variantes
Acciones

mem_fun

De cppreference.com
< cpp‎ | utility‎ | functional

Sintaxis:

template <class R, class C>
  mem_fun_t<R,C> mem_fun (R (C::*fn)());
 
template <class R, class C, class A>
  mem_fun1_t<R,C,A> mem_fun (R (C::*fn)(A));
 
'' más definiciones son provistas para encapsular funciones miembro const
  • fn es un puntero a una función miembro de una clase (la cual debe estar definida cuando mem_fun es invocada). El tipo de la función es determinado automaticamente en base a su firma, pudiendo tomar cero argumentos (como por ejemplo &std::string::length) o un argumento (como por ejemplo &std::ostream::flags). Ver sin embargo la sección #Detalles.
    • mem_fun** es una función definida en la cabecera <functional> que crea un functoide a partir de una función miembro fn de una clase C. El functoide define un operator() con lo cual puede modelar el mismo comportamiento que el de invocar a la función miembro; para esto, se define como el tipo del primer argumento un puntero a instancia de la clase, es decir C* (o C const*).

El tipo retornado por la función es el tipo de functoide:

  • mem_fun_t<Resultado,Clase> si C::fn no tiene argumentos.
    • const_... si la función miembro es const.
  • mem_fun1_t<Resultado,Clase,Argumento> si C::fn toma un argumento.
    • const_... si la función miembro es const.

La función está diseñada para ser invocada pasando el functoide resultado a una función o algoritmo directamente, sin necesidad de declarar explícitamente una variable y su tipo. En el futuro estándar C++11, será posible declarar automáticamente una variable functoide gracias a la palabra clave auto:

    auto functoide = mem_fun (&std::vector< double >::size);
    ....
    n = functoide(my_pointer_to_vector); '' equivale a my_pointer_to_vector->size()

[editar] Ejemplo

FIXME

[editar] Detalles

El functoide retornado por mem_fun toma como primer argumento un puntero a instancia de una clase. Un functoide creado por la función hermana mem_fun_ref toma como primer argumento una referencia a una instancia de la clase. La distinción es importante al usar, por ejemplo, contenedores STL almacenando punteros polimórficos.

mem_fun adapta funciones miembro que tomen cero o un argumentos. Para funciones de dos o más argumentos, es necesario utilizar una construcción más avanzada como std::function que será incorporada desde C++11.

[editar] Tópicos Relacionados

  • mem_fun_ref -- crea un functoide desde una función miembro de una clase
  • ptr_fun -- crea un functoide desde un puntero a una función
  • bind1st, bind2nd -- fijar los parámetros de un functoide