Funktionszeiger

Kennst Du Funktionszeiger und nutzt Du sie auch?

  • Nein, ich kenne keine Funktionszeiger.

    Stimmen: 0 0,0%
  • Ja, ich kenne sie, nutze sie ber nicht.

    Stimmen: 0 0,0%
  • Ja, ich kenne sie und nutze sie auch.

    Stimmen: 4 100,0%

  • Anzahl der Umfrageteilnehmer
    4

Mupfel

Mitglied
Mir ist aufgefallen, dass einige C-Tutorials Funktionszeiger nicht abdecken. Mich interessiert, wie viele von euch dieses Feature kennen und nutzen.

Funktionszeigerbeispiel:
// erzeugt Variable "fn_ptr1" vom Typ Funktionszeiger
int (*fn_ptr1)(int param1, void *param2);

// Erzeugt vielseitige Schnittstelle für Fahrzeuge
struct Fahrzeug {
  void (*lenken)(float winkel);
  void (*beschleunigen)(float kraft); // kraft < 1: bremsen
};
 
Kenne ich und kenne keinen guten Grund, sie nicht zu nutzen. Ich hab zwar ausgewählt, dass ich sie nutze, aber im Moment mache ich nichts mit C. Deswegen lautet meine Antwort eher "würde ich nutzen, wenn ich im Moment in C unterwegs wäre".
 
Drei Antworten, eine von mir, nach einer Woche. Ok. Ich danke den beiden Anderen für ihre Teilnahme!

Ich kam auf das Thema, als mir auffiel, dass Qt keine Funktionszeiger nutzt.[ed1] Gtk scheint ein G_CALLBACK()-cast zu benötigen. In Enlightenment habe ich mich noch nicht eingelesen, aber da sind unter openSUSE auch die Keymaps/Charmaps kaputt.

[ed1] Ich hatte in Qt4 vor Jahren keine Funktionszeiger gesehen; inzwischen bin ich eines besseren belehrt worden!
 
Zuletzt bearbeitet:
Dann hast du jetzt noch eine mehr ;)
Wo ich sie nutze?:
- Callback Funktionen. Irgendwo in den Ressourcen die ich hier eingestellt habe, findet sich sicher so was wie eine for-each Imlementierung die einen Funktionszeiger übergeben haben will. Auch C Standardfunktionen wie qsort() und bsearch() haben vordefinierte Funktionszeiger in der Parameterliste.
- Threads. Typischerweise wird der Pointer der Threadfunktion beim Erzeugen des Threads übergeben.
- Interfaces und Objekte. Das geht in die Richtung von deinem Beispiel und ist die Art wie man OOP in C darstellt.
 
Qt verwendet doch auch Funktionszeiger, über deren integrierte Signal-Slot Mechanik.

Man kann auch inline Lambdas verwenden:
C++:
QTimer::singleShot(1000, []() { qDebug() << "Timer triggered!"; });
 
Ich glaube, ich habe zuletzt mit Qt 4 gearbeitet, da hatte ich noch keine Funktionszeiger gesehen. Aber danke für die Korrektur! Ich editiere das noch in meinen Kommentar rein.
 
Zurück
Oben Unten