Leggendo una domanda in StackOverflow, mi chiedevo se è possibile dichiarare una funzione che accetta un puntatore a se stesso. Cioè per rendere tale dichiarazione di foo
, per cui i seguenti sarebbe corretto:Posso dichiarare una funzione che può assumere il puntatore come argomento?
foo(foo);
L'idea più semplice è colata a un'altra puntatore di funzione (non possono trasmettere void*
, poiché può essere più piccola), quindi la dichiarazione di funzione assomiglia a questo:
void foo(void (*)());
Mentre va bene in C (e funziona con getto in C++), mi chiedo, se può essere fatto senza così dura informazione "reinterpretare" casting o perdere tipo.
In altre parole, voglio la seguente dichiarazione:
void foo(void (*)(void (*)(void (*) (...))));
ma, ovviamente, le dichiarazioni illimitate sono impossibili. Naive typedef
non aiuta neanche.
I modelli C++ sono ben accetti, anche se rendono il codice di chiamata (foo(foo)
) un po 'meno sintetico, ma comunque finito.
Le risposte in stile C che mostrano come si possono eliminare informazioni di tipo senza eseguire il casting o altri trucchi del genere sono, ovviamente, interessanti, ma non saranno accettate.
Esiste un linguaggio funzionale in cui ciò è possibile? – Crashworks
Esistono lingue non funzionali in cui è possibile, ad es. C# –
è banale da fare in qualsiasi linguaggio tipizzato dinamicamente, ad es. Python, Ruby, Perl, PHP, JavaScript, solo per citarne alcuni ... – newacct