Tricks für Pointerbenutzung

Endurion hat gesagt.:
Funktionspointer (gerne unterschätzt)

Behauptung: Die Verwendung von Funktionspointer ist fast immer eine Folge von Designfehlern!

Falls jemand wiedersprechen will: Bitte ein sinnvolles Beispiel bringen an dem Funktionspointer Sinn machen.

Gruß
 
Rein prinzipiell hängt es sehr davon ab ob C oder C++. In letzterem FAll stimme ich zu, in C sind sie _sehr_ brauchbar und nahezu unverzichtbar!! v.a. in hardwarenaher Programmierung (vgl. Interrupt-Tables = function pointer!) oder Signalbearbeitung mit signal() etc...!!

Mein Beispiel für C:

Gegeben: Textuelle Anweisunglsiste aus arbiträren Befehlen eines Befehlssatzes mit variabler Anzahl an Argumenten.

Gesucht: Möglichkeit diese Liste in die schnellste Ausführung bestimmter Funktionen umzusetzen. Es soll aber kein neues File erstellt werde, jederzeit gestoppt und fortgesetzt werden können. Es soll möglich sein safe-states einzufügen, ab denen dann später fortgesetzt werden soll. Es soll möglich sein, Kontrollstrukturen wie z.B. Schleifen in der AWL zu realisieren.

good luck :-)

Joe
 
Behauptung: Die Verwendung von Funktionspointer ist fast immer eine Folge von Designfehlern!
Falls jemand wiedersprechen will: Bitte ein sinnvolles Beispiel bringen an dem Funktionspointer Sinn machen.
Ermitteln von Funktionspointern mit GetProcAddress(...) aus einer DLL! Beim dynamischen Arbeiten mit DLL's muß man die Funktionspointer mittels LoadLibrary und GetProcAddress ermitteln, um auf die Fun ktionen zugreifen zu können.
 
Ich hab mich auf C++ bezogen, in C ist es was anderes, das geb ich zu! - Es fiel ja auch schon das Schlagwort Polymorphie... Die Winapi ist ja auch in C und jeder der schon Wrapper für Teile der Winapi geschrieben hat wird wohl wissen wie die Funktionspointer ankotzten.

In C++ lässt sich mit OOP so ziemlich alles besser moddelieren als mit Func-Pointers, auch das genannte Beispiel.

Gruß
 
Mein Beispiel bezieht sich sowohl auf Codegröße als auch auf Geschwindigkeit, bei beiden ist man mit C++ jedenfalls am Sand. Ich hab das genannte Bsp. in <10k Codespeicher für einen Atmel AVR embedded umgesetzt + Interface (Mini SPS im selbstbau :-). Der Overhead bei C++ mit dem ganzen VFT und co. is da nicht drin...

Vom Modellierungs-POV ist das eine klare Sache... nur die meisten vergessen z.B. dass OOP _keine Spracheingenschaft_ sondern eine Design-Methode ist. Der Hype um Java tut das seine dazu. C++ is um Eckhäuser mächtiger als Java. Das einzige Problem ist: Wie bringe ich einem möglichst gering zu bezahlenden (ergo nicht gut/lang gebildeten) bei, Programme zu schreiben, die funktionieren. Man packt alles in die Sprache pder die VM. Das ist einer der Fehler von Java. Fast jede mögliche Optimierung ist geopfert worden.

Das gleiche gilt für Function-Pointer in C++. Ich verwende sie lieber, als dann eine weitere Klassenstruktur für eine Kleinigkeit schreiben zu müssen.
Wer damit nicht vernünftig umgehen kann, der soll lieber Java lernen... oder bei Visual Basic bleiben ;-) *sidekick* (obwohl ich ab und zu selbst was mit VB machen _muss_)

lg
Johannes
 
Ich habe sie mal benutzt um benutzerdefinierte Menüs zu erstellen, soll heißen so schöne Sachen wo man ein Pull Down Menü selber einrichten kann. Zeiger auf die Hinterlegte Funktion legen fertig. Fand es eine recht gute Möglichkeit sowas flexibel zu gestallten.

Gruß Lemi
 
Zurück