Sto iniziando con una breve introduzione di ciò che conosco dal linguaggio C:
- un puntatore è un tipo che memorizza un indirizzo o un NULL
- l'operatore
*
legge il valore sinistro della variabile alla sua destra e usa questo valore come indirizzo e legge il valore della variabile a quell'indirizzo - l'operatore
&
genera un puntatore alla variabile alla sua destra
Quindi pensavo che in C ++ i puntatori possono funzionare anche in questo modo, ma ho sbagliato. Per generare un puntatore a un metodo statico devo fare questo:
#include <iostream>
class Foo{
public:
static void dummy(void){ std::cout << "I'm dummy" << std::endl; };
};
int main(){
void (*p)();
p = Foo::dummy; // step 1
p();
p = &(Foo::dummy); // step 2
p();
p = Foo; // step 3
p->dummy();
return(0);
}
Ora ho diverse domande:
- Perché funziona il passaggio 1?
- Perché funziona anche il passaggio 2? Sembra un "puntatore al puntatore" per me, molto diverso dal punto 1.
- Perché il terzo passo è l'unico che non funziona ed è l'unico che mi sembra ragionevole, sinceramente?
- Come posso scrivere una serie di puntatori o un puntatore sulla struttura dei puntatori per memorizzare metodi (statici o non statici di oggetti reali)?
- Qual è la migliore sintassi e lo stile di codifica per generare un puntatore a un metodo?