Ein leitender Entwickler in meinem Team verwendete traditionelle Callbacks im C-Stil in unserer Qt-Anwendung, anstatt das Qt-Signal zu verwenden / Slot-Mechanismen.
Mein erster Reflex wäre, seinen Code zu ersetzen und stattdessen Qt-Signal / Slot zu verwenden.
Gibt es gute Gründe, Callbacks in einer Qt-Anwendung / Bibliothek zu verwenden?
Danke.
Ich denke, der bessere Ansatz wäre, das Framework, das Sie verwenden, zu nutzen und Signal / Slots zu verwenden.
Wenn der betreffende Code funktioniert und nicht hässlich ist oder Probleme verursacht, dann sollten Sie ihn am besten in Ruhe lassen.
In der Signal / Slot-Dokumentation wird beschrieben, warum der Signal / Slot-Ansatz besser ist:
>Callbacks haben zwei grundlegende Fehler: Erstens sind sie nicht typsicher. Wir kann nie sicher sein, dass die Verarbeitungsfunktion wird das aufrufen Rückruf mit den richtigen Argumenten. Zweitens ist der Rückruf stark gekoppelt mit der Verarbeitungsfunktion da muss die Bearbeitungsfunktion sein wissen, welcher Callback angerufen werden soll.
Beachten Sie Folgendes:
Im Vergleich zu Callbacks sind Signale und Slots aufgrund der höheren Flexibilität ein wenig langsamer
Die Geschwindigkeit spielt in den meisten Fällen keine Rolle, aber es kann einige extreme Fälle wiederholter Anrufe geben, die einen Unterschied machen.
Sie sollten zwischen Callbacks unterscheiden, die synchron sind und für die Rückgabe von entweder allmählichen Ergebnissen oder Tupeln (mehrere Elemente wie "& lt; & gt; aber mehr) und Callbacks, die asynchrone lose Kopplung sind, verwendet werden. Für letztere sollten normalerweise Signale / Slots verwendet werden. Für Ersteres kann es in beiden Fällen sinnvoll sein, je nachdem, ob es eine Hauptfunktion Ihrer Anwendung ist (Signale / Slots verwenden) oder die Schnittstelle einer Nicht-GUI-Bibliothek, die portabler sein könnte (verwenden Sie einfache Callbacks für einfaches C / C ++) tragbarer Code).
Im Allgemeinen habe ich prägnante Programmierungsregeln, die dazu tendieren, auf die sauberste und geringste Code / Interface-Komplexität zu verweisen. Für den Tupel-Return-Fall verwende ich oft QMap, anstatt eine weitere Klassendefinition oder Signal / Slot- oder Callback-Methode zu erstellen. Dies funktioniert auch gut zum Bündeln und Übergeben von Parametern, insbesondere für Dinge, die sich in verschiedenen Teilen des Systems entwickeln müssen.