Beim Lesen einer Frage im Stackoverflow habe ich mich gefragt, ob es möglich ist, eine Funktion zu deklarieren, die einen Zeiger auf sich selbst nimmt. I.e.Kann ich eine Funktion deklarieren, die Zeiger auf sich selbst als Argument nehmen kann?
foo(foo);
Die einfachste Idee auf eine andere Funktion Zeiger Gießen (kann nicht gegossen void*
, da es kleiner sein kann), so die Funktionsdeklaration: solche Erklärung von foo
, für die folgende wäre richtig zu machen sieht wie folgt aus:
void foo(void (*)());
Während das in C OK ist (und wird mit dem Gießen in C++ arbeiten), frage ich mich, ob es ohne eine solche harte „umdeuten“ Gießen oder verlieren Typinformationen durchgeführt werden kann.
Mit anderen Worten, ich möchte folgende Erklärung ab:
void foo(void (*)(void (*)(void (*) (...))));
aber natürlich sind unbegrenzt Erklärungen unmöglich. Naive typedef
Ing hilft auch nicht.
C++ - Vorlagen sind willkommen, auch wenn sie den aufrufenden Code (foo(foo)
) etwas weniger prägnant aussehen lassen, aber immer noch endlich.
C-style Antworten, die zeigen, wie man Typinformationen ohne Casting oder andere Tricks dieser Art fallen lassen kann, sind natürlich interessant, werden aber nicht akzeptiert.
Gibt es eine funktionale Sprache, in der dies möglich ist? – Crashworks
Es gibt nicht-funktionale Sprachen, in denen es möglich ist, z.B. C# –
es ist trivial in jeder dynamisch-typisierten Sprache zu tun, z.B. Python, Ruby, Perl, PHP, JavaScript, um nur einige zu nennen ... – newacct