Was sind Laufzeitinformationen? Was eine MOC Datei?
-
Hi,
unter http://de.wikipedia.org/wiki/Qt_(Bibliothek)#Signal-Slot-Konzept
habe ich folgendes gelesen:Eine Besonderheit ist die Verwendung von „signals“ und „slots“, die auf einfache Art und Weise die Kommunikation zwischen einzelnen Objekten ermöglicht. Bei den meisten anderen Klassenbibliotheken wird das durch Rückruffunktionen (callback function) realisiert.
Aus der Sicht der Entwickler haben Rückruffunktionen zwar den Vorteil einer höheren Ausführungsgeschwindigkeit, jedoch erlaubt die Signal-Slot-Implementierung lediglich eine Laufzeit-Prüfung der Aufrufparameter bezüglich ihres Typs, nicht jedoch zur Compile-Zeit.Zur Nutzung des Signal-Slot-Konzepts ist daher die Verwendung des MOC-Präprozessors unbedingt notwendig, welcher die zur Prüfung nötigen Laufzeitinformationen den jeweiligen Klassen hinzufügt.Kann mir das jemand erklären?
Ich habe eine Benutzeroberfläche geschrieben und natürlich auch das Signal/Slot Konzept verwendet. Leider verstehe ich nicht wirklich was dieser Präprozessor macht, eigentlich verstehe ich den Text in etwas ab "Aus der Sicht der Entwickler" nicht mehr.
-
Der moc generiert aus Headerdateien, die Klassen mit signals oder slots enthalten, extra cpp-Dateien, die Informationen über diese Funktionen enthalten. Für jede signal-Funktion generiert er eine Funktionsdefinition, sodass die Funktion die ihr zugeordneten Slots aufruft. Für Signals und Slots werden außerdem die Funktionspointer und ihr Name als String gespeichert, damit die Funktionen zur Laufzeit anhand eines Strings aufgerufen werden können (also ein Nachbau von Reflection). Rufst du dann QObject::connect() auf, werden die in SIGNAL() und SLOT() angegebenen Funktionsnamen in einen String umgewandelt und dann dynamisch verknüpft.