Autor Thema: OOP mit Ansi-C  (Gelesen 7860 mal)

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« am: 28. January 2006, 17:14 »
Hallo,
Bevor jetzt die Fragen wie "warum nicht C++?" aufkommen, möchte ich bemerken, dass ich aus verschiedenen Gründen kein C++ mag und die anderen Personen, die an dem Projekt arbeiten kein Obj-C können.

Also, ich habe das Problem, dass ich momentan eine Funktion "überladen" müsste. Der Ausgangspunkt ist folgender:
Es gibt ein Objekt "game_object". Die Daten von diesem werden als "strukt" gespeichert. Nun gibt es auch eine Funktion "game_object_draw", welche die meisten "game_object"-Objekte zeichnen soll. Nur MANCHE brauchen eine eigene draw-Funktion. Und hier fängt das Problem an: Wie mache ich das?
Eine Möglichkeit währe es natürlich, die Funktionen einfach in Funktionszeigern innerhalb der Struktur zu lagern, aber da fehlt dann natürlich ein "this" damit ich auch wirklich auf die Daten dieses Objekts zugreifen kann.
Was vielleicht noch wichtig ist: Die Strukturen kommen dann in eine verkettete Liste und deshalb müssen die Funktionen per Zeiger auf die Liste abrufbar sein.

Weiß also jemand wie ich ein "this" in C implementieren kann?

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 28. January 2006, 17:20 »
Du kannst dieses Problem genauso lösen wie C++ es löst: vtables (Funktionspointer innerhalb des "Objektes" (also der struct). Ausserdem musst du den this-Pointer als Funktionsargument übergeben.

Was soll das denn für ein Projekt werden? Wenn es kein ausgereiftes 3D Spiel wird, könnte man auch Java und C# verwenden, wobei ich Java C# vorziehen würde. :D

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 28. January 2006, 17:48 »
Nein, eben nicht. Java und C# sind noch grausiger als C++. C weil es portable und trotzdem hardware-nahe ist.

Es wird kein 3D-Spiel aber es geht um Geschwindigkeit da es auch auf alten Rechnern laufen soll. Es soll eine neue Engine für ein altes Spiel werden.

Danke für deinen Tipp. Ich geniere mich gerade unheimlich dafür, nicht selber auf die Idee gekommen zu sein. Weil's einfach die Kombination aus Funktionspointern und Objekt als Argument ist...aber ich war gerade erst aufgestanden und noch ganz verkatert...na ja, danke jedenfalls.

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #3 am: 29. January 2006, 13:42 »
Da bauste dir mit komischen Konstruktionen manuell und aufwändig Vtables und this-Zeiger nach und sagst dann das C++ grausig wäre. :P
*post*

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 31. January 2006, 21:26 »
Ist es auch :) Zu Abstrakt einfach.

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #5 am: 31. January 2006, 22:15 »
Ist ja viel besser das selbe dann jedes mal stupide nachzubauen ...
*post*

 

Einloggen