In una dichiarazione di funzione, argomenti di tipo array decadimento nel puntatori al primo elemento, argomenti della funzione tipo decadimento in un puntatore alla funzione, quindi la firma sarebbe:
widget w(gadget(*)(), doodad(*)());
Cioè, una funzione che prende come primo argomento un puntatore a una funzione di prendere senza argomenti e restituendo gadget
, che prende come secondo argomento un puntatore a una funzione di prendere senza argomenti e restituendo un doodad
e che la funzione stessa restituisce un widget
ci sono ancora più interessante o confuso cantare casi, come:
// assume 'x' is a variable defined somewhere:
widget w(gadget(x));
Come poteva che essere interpretato come una dichiarazione di funzione? Voglio dire, x
è una variabile, giusto? Bene, quando si dichiara una variabile è possibile aggiungere una parentesi aggiuntiva, quindi gadget x;
e gadget (x);
dichiarano entrambi la stessa variabile x
. Lo stesso vale per funzionare argomenti in modo che il codice di cui sopra appare come una dichiarazione di una funzione che prende un primo argomento di nome x
di tipo gadget
e restituisce una widget
...
fonte
2013-05-16 13:31:23
correlati/vittima: http://stackoverflow.com/questions/9327505/about-pointers-to-functions-in-function-declarations – jrok