Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

11

15.02.2009, 12:00

boost::function und boost::bind sind deine Freunde ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

15.02.2009, 12:02

es hängt davon ab.
wenn das ganze teil einer 3d engine is und der benutzer soll das verhalten von irgendeinem objekt selbst definieren und an die engine übergeben, so wäre vielleicht die interface variante sinnvoll.
wenn es ne library wie z.B. algorithm aus der C++ stdlib ist schauts schon wieder komplett anders aus.
die variante mit dem void Zeiger würd ich jetzt mal versuchen zu vermeiden, weil du da jegliche typsicherheit verlierst...

13

15.02.2009, 13:03

Hm, also gedacht war das ganze jetzt für einen Octree. Da hat man nun ja viele Sachen, man möchte zum Beispiel einen Strahlen oder Kugel Kollisionstest machen und die würde ich dann halt in so eine Funktion packen, weil das rekursive durchwandern ja prinzipiell identisch ist.

Und das mit dem Funktionen als Objekte übergeben sieht ja mal ganz schön geil aus, da wusste ich nicht, das sowas überhaupt geht.
Hm, wo wir gerade dabei sind, kennt jemand hübsche Artikel die mal fortschrittliche Template Methoden zeigen? Git da ja anscheinend noch eine Menge zu lernen.
Lieber dumm fragen, als dumm bleiben!

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

14

15.02.2009, 13:18

Schau dir doch die Standardbibliothek an. Da kannst du eine Menge lernen. Oder auch in boost gibt es zu den Techniken ja meist auch noch ein wenig dazu erklärt..

Wenn du aber wirklich etwas sehr abstraktes mit templates sehen willst, dann solltest du dir "Modern C++ Design" von Alexandrescu zu tun. Da kommst du auf deine Kosten.

btw sind viele Techniken, die du in der Standardbibliothek und boost siehst denen sehr ähnlich in dem Buch. Also Policys, Smart Pointer usw.

15

16.02.2009, 09:17

Keine Ahnung ob es schon genannt wurde: Functionoid ist das Schluesselwort, nach dem du suchst. Functionoids are functions on steroids.. Aussedem sollte es keinen Unterschied machen, ob du nun eine Funktion oder einen Funktor benutzt, selbst fuer das Template.

Zitat


Das sind jetzt mindestens 2 Techniken, die das selbe erzielen. Die Frage ist, was ist besser? Wo liegen vor und nachteile?
Bei der Template Methode muss man eine Klasse mit () operaotr schreiben, was komisch aussieht. Aber dafür geschieht alles zur Kompilierzeit und mit Zeigern könnte es theoretisch Laufzeitprobleme geben?

Functionoid koennen Zustaende speichern. Beispiel Sortieren in C++ fuer Fortgeschrittene von mir. Und nur weil es Template ist, heisst es noch lange nicht, dass es zur Kompilezeit alles aufgeloest wird. Du rufst in dem Template dann ja auch ein Operator/Funktion auf, so dass es eigentlich kein Laufzeitunterschied geben sollte. Moderne Compiler koennen aber mit Funktionsobjekten besser optimieren (habe ich mal irgendwo gelesen).
If it were not for laughter, there would be no Tao.

16

16.02.2009, 13:02

Zitat von »"knivil"«

Moderne Compiler koennen aber mit Funktionsobjekten besser optimieren (habe ich mal irgendwo gelesen).

Gestern laß ich in Effective STL, dass, wenn man FUnktionen übergibt, diese heimlich als Funktionszeiger übergeben werden, und dann oft nicht mehr geinlined werden können, was einen Geschwindikeitsunterschied erzeugen kann.
Lieber dumm fragen, als dumm bleiben!

17

16.02.2009, 14:36

Wird denn operator() geinlined?

Btw. ich halte nicht viel von inline ... das macht sowieso jeder wie er will.
If it were not for laughter, there would be no Tao.

Werbeanzeige