valores una tipos retornan referencia que punteros programacion por parametros llamar funciones funcion ejemplos como arreglos c++ c++11 typedef

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();

http://ideone.com/e1XuYc


Tiene una sintaxis similar, excepto que elimina el identificador del puntero:

using FunctionPtr = void (*)();

Aquí hay un Example

Si quieres "quitarte la fealdad", prueba lo que Xeo sugirió:

#include <type_traits> using FunctionPtr = std::add_pointer<void()>::type;

Y aquí hay otra demo .