Tecnología

Inicio

Cómo utilizar los punteros de función en C ++

Un puntero de función es, en esencia, sólo un puntero a una función. En idiomas como el C ++, cada función y variable en un programa de ordenador existe como una dirección de memoria, y una variable pueden contener el valor de esa dirección. Esa variable se puede pasar a una devolución de llamada, que luego puede llamar a la función que la variable apunta a. También se puede utilizar en un gestor de eventos, o para el enlace de una función miembro. Debido a su sintaxis complicada, los punteros de función a menudo se evitan por los programadores, pero se pueden utilizar para llevar a cabo fácilmente muchas tareas de gran alcance.

Instrucciones

1 Escribir un programa en C ++. Este es el programa en el que va a utilizar un puntero de función.

2 Definir un puntero de función. Esto se puede hacer de varias maneras. Declarar una función, como por ejemplo:

doSomething vacío (datos int)
IR

y posteriormente declarar un puntero a ella. O bien, puede declarar una función como un puntero:

void (* doSomething) (int)
IR

Por último, se puede declarar un typedef, a continuación, crear una variable de ese tipo.

typedef void (* voidTakingInt) (int)
IR

Ahora puede usar \ "voidTakingInt \" como un tipo:

doSomething vacío (datos int)
IR
voidTakingInt fun_ptr = & doSomething;

3 Declarar algo que utiliza el puntero de función. Esto será a menudo algo que utiliza el puntero de función como una función de devolución de llamada, de modo que cuando se produce un evento específico, la función se ejecuta su función. Un ejemplo es una función de fichero de carga que tiene una función de devolución de llamada para indicar el progreso.

4 Llame a la función del puntero a ella. Esto se haría dentro de la función que escribió que acepta un puntero a función como un parámetro:

doSomething vacío (datos int) {
}

callAnotherFunction (void (* otherFunction) (int)) {

(* OtherFunction) (3)
IR

}

int main (int argc, char * argv []) {

callAnotherFunction (y doSomething)
IR
devolver 0
IR

}

Consejos y advertencias

  • En la programación orientada a objetos, las funciones son a menudo miembros de una determinada clase. funciones miembro no estáticos no se pueden pasar como punteros de función. Una práctica común es pasar en lugar de un puntero a un objeto que se puede llamar a la función miembro es necesario. Otra forma es la de crear una función miembro estático que toma como parámetro de datos, que se utiliza para pasar una instancia del tipo de objeto. Esto podría llamar a la función miembro correspondiente. Por ejemplo:
  • // Esto fue declarado como static en la especificación MiClase
  • MyClass :: void callAnotherFunction (void * data) {
  • MiClase instancia * = (MyClass *) (datos)
  • IR
  • intance-> doSomething ()
  • IR
  • }