una - ¿Cómo puedo escribir un puntero de función con C++ 11 usando sintaxis?
punteros c++ (4)
¿Qué tal esta sintaxis para mayor claridad? (Nota doble paréntesis)
void func();
using FunctionPtr = decltype((func));
Me gustaría escribir esto
typedef void (*FunctionPtr)();
usando using
¿Como podría hacerlo?
Desea un type-id
, que es esencialmente exactamente lo mismo que una declaración, excepto que elimina el declarator-id
del declarator-id
. El declarator-id
suele ser un identificador y el nombre que declara en la declaración de equivalentes.
Por ejemplo:
int x
El declarator-id
es x
así que simplemente elimínelo:
int
Igualmente:
int x[10]
Eliminar la x
:
int[10]
Para tu ejemplo:
void (*FunctionPtr)()
Aquí el declarator-id
es FunctionPtr
. así que simplemente elimínelo para obtener el type-id
:
void (*)()
Esto funciona porque, dado un type-id
siempre se puede determinar de manera única dónde irá el identificador para crear una declaración. De 8.1.1 en el estándar:
Es posible identificar de manera única la ubicación en [id-tipo] donde aparecería el identificador si la construcción fuera una [declaración]. El tipo nombrado es entonces el mismo que el tipo del identificador hipotético.
La "fealdad" también se puede quitar si evita el ingreso de un puntero:
void f() {}
using Function_t = void();
Function_t* ptr = f;
ptr();