Al leer una pregunta en stackoverflow, me pregunté si es posible declarar una función que toma un puntero a sí mismo. Es decir. para hacer tal declaración de foo
, para los cuales los siguientes sería correcta:¿Puedo declarar una función que puede tomar el puntero a sí mismo como argumento?
foo(foo);
La idea más simple es emitir a otro puntero de función (no pueden transmitir contenido a void*
, ya que puede ser más pequeño), por lo que la declaración de la función se parece a esto:
void foo(void (*)());
Mientras eso está bien en C (y trabajará con el bastidor en C++), me pregunto, si puede hacerse sin dicha información "reinterpretar" casting o perder tipo duro.
En otras palabras, quiero que la siguiente declaración:
void foo(void (*)(void (*)(void (*) (...))));
pero, por supuesto, las declaraciones son ilimitadas imposible. Naive typedef
ing tampoco ayuda.
Las plantillas de C++ son bienvenidas, incluso si hacen que el código de llamada (foo(foo)
) parezca un poco menos conciso, pero igual finito.
Las respuestas de tipo C que muestran cómo se puede soltar información de tipo sin transmitir, u otros trucos de ese tipo son, por supuesto, interesantes, pero no serán aceptados.
¿Existe un lenguaje funcional en el que esto sea posible? – Crashworks
Existen idiomas no funcionales en los que es posible, p. C# –
es trivial en cualquier lenguaje de tipado dinámico, p. Python, Ruby, Perl, PHP, JavaScript, solo por nombrar algunos ... – newacct