¿Cómo puedo tipear un puntero de función que toma una función de su propio tipo como argumento?

StackOverflow https://stackoverflow.com/questions/816356

  •  03-07-2019
  •  | 
  •  

Pregunta

Ejemplo: una función que toma una función (que toma una función (que ...) y un int) y un int.

typedef void(*Func)(void (*)(void (*)(...), int), int);

Explota recursivamente donde (...) . ¿Hay alguna razón fundamental para que esto no se pueda hacer o hay otra sintaxis? Me parece que debería ser posible sin un elenco. Realmente estoy tratando de pasar una tabla de despacho, pero podría resolverlo si pudiera pasar este tipo.

¿Fue útil?

Solución

Puede ajustar el puntero de función en una estructura:

struct fnptr_struct;
typedef void (*fnptr)(struct fnptr_struct *);
struct fnptr_struct {
  fnptr fp;
};

No estoy seguro de si esto es una mejora en el casting. Sospecho que es imposible sin la estructura porque C requiere que se definan los tipos antes de que se usen y no hay una sintaxis opaca para typedef.

Otros consejos

Es imposible hacerlo directamente. Sus únicas opciones son hacer que el argumento de puntero de función acepte argumentos no especificados, o aceptar un puntero a una estructura que contenga el puntero de función, como sugirió Dave .

// Define fnptr as a pointer to a function returning void, and which takes one
// argument of type 'pointer to a function returning void and taking
// an unspecified number of parameters of unspecified types'
typedef void (*fnptr)(void (*)());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top