mi piacerebbe scrivere questoCome si digita un puntatore a funzione con il C++ 11 usando la sintassi?
typedef void (*FunctionPtr)();
utilizzando using
. Come potrei farlo?
mi piacerebbe scrivere questoCome si digita un puntatore a funzione con il C++ 11 usando la sintassi?
typedef void (*FunctionPtr)();
utilizzando using
. Come potrei farlo?
Si desidera un type-id
, che è essenzialmente esattamente la stessa di una dichiarazione tranne che si elimina il declarator-id
. declarator-id
è in genere un identificatore e il nome che si dichiara nella dichiarazione di equivillo.
Ad esempio:
int x
Il declarator-id
è x
quindi semplicemente rimuovere:
int
Analogamente:
int x[10]
Rimuovere il x
:
int[10]
Per esempio:
void (*FunctionPtr)()
Qui il declarator-id
è FunctionPtr
. quindi basta rimuoverlo per ottenere il type-id
:
void (*)()
Questo funziona perché data una type-id
si può sempre determinare univocamente in cui l'identificatore andrebbe a creare una dichiarazione. Dalla 8.1.1 nella norma:
E 'possibile identificare in modo univoco la posizione nel [tipo-id], dove l'identificatore sembrerebbe se la costruzione fosse una [dichiarazione]. Il tipo named è quindi uguale al tipo dell'identificatore ipotetico .
Che ne dici di questa sintassi per chiarezza?(Nota doppia parentesi)
void func();
using FunctionPtr = decltype((func));
Cosa significa la doppia parentesi in questo contesto? Un * riferimento * a un puntatore di funzione? – 0x499602D2
Il tuo 'FunctionPtr' non è un puntatore a funzione, ma' decltype (& f) 'è, vedi [qui] (http://coliru.stacked-crooked.com/view?id=77def487d5ed99885c0523d48c2ae7a1-50d9cfc8a1d350e7409e81e87c2653ba). – rubenvb
@ 1234597890 FunctionPtr è un riferimento a valore non costante al tipo 'void()' –
Il "brutto" possono anche essere portati via se si evita typedef-zione un puntatore:
void f() {}
using Function_t = void();
Function_t* ptr = f;
ptr();
molto conf'using' anzi, soprattutto perché gli identificatori del puntatore di funzione abitualmente si trovavano nel mezzo di un'istruzione 'typedef' e si spostavano in primo piano usando' using'. Almeno è lì che mi sono perso. – starturtle