Otra de las características que dan a C++ mucha más flexibilidad son los punteros a miembro. Éstos nos permiten trabajar con elementos que podemos encontrar dentro de una clase, un struct o una union. Y el mejor ejemplo lo encontramos a la hora de hacer callbacks, si repasamos los callbacks en C inmediatamente veremos que en un lenguaje orientado a objetos necesitamos poder acceder a métodos dentro de una clase. Si hacemos un ejemplo parecido al de aquel post, podemos demostrar que la misma manera podemos acceder a métodos estáticos dentro de la clase:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <iostream> #include <cstring> using namespace std; /* TYPEDEF */ typedef int (*funcion_callback)(char*); class MyClass { public: static int eco(char *cadena) { cout << "Eco: "<<cadena<<endl; return (strlen(cadena)); } }; /* DECLARACIÓN DE LLAMADORA */ void generaecos(funcion_callback func) { int num; cout << "Voy a llamar al eco con el texto HOLA" << endl; num=func((char*)"HOLA"); cout << "La he llamado y me ha devuelto: "<< num << endl; } int main() { generaecos(MyClass::eco); } |
Pero cuando queremos llamar a un método no estático de la clase fallará sin miramientos, ya que necesitaríamos la información del objeto en el que se encuentra el método, y de esta forma estaríamos pasando directamente una dirección de memoria (al ejecutar la función no encontraría el puntero this, entre otras cosas).… Leer artículo completo
Últimos comentarios