Ich versuche, eine Reihe von GLIB-Klassen in C++ mit GLIBMM neu zu implementieren. Die meisten von ihnen sind fehlerhaft und müssen stark erweitert werden, und da das gesamte Projekt in C++ ausgeführt wird, habe ich es vorgezogen, den Code zu portieren, bevor ich ihn korrigiere.gblimm/gtkmm benutzerdefinierte Eigenschaft
Leider bin ich kein GLIB-Experte und selbst wenn ich viele Tage mit der offiziellen Dokumentation verbracht habe, bin ich immer noch in Schwierigkeiten, einige Konzepte zu verstehen, besonders im Bereich Eigenschaften.
Soweit ich verstanden habe, Eigenschaften sind ein vollständiger Ersatz (und vielleicht mehr) für Setter und Getters. Anstatt für jedes Attribut spezielle Methoden zu verwenden, wird für alle eine allgemeine Methode set/get_property verwendet, die auf die Eigenschaft mit einem Namen (oder einer ID) zugreift und einen Container wie GValue verwendet, um mehrere Arten von Daten zu speichern.
Der einzige Vorteil, den ich darin sehen kann, ist die Fähigkeit, auf Eigenschaften mit Namen zuzugreifen, die in Strings enthalten sind (die zum Beispiel aus einer Konfigurationsdatei stammen können), aber ich vermisse etwas. Darüber hinaus scheint dies in GLIB richtig zu sein, aber nicht in Glib :: ObjectBase, was besagt, dass Sie eine spezielle Eigenschaft _ (*) getter/setter anstelle von property_set/get_value bevorzugen sollten.
Die Dokumentation über Glib :: Property lesen Ich bin mir nicht sicher, wie eine vollständige Eigenschaften-Implementierung in C++ aussehen sollte, ich nehme an, die fehlende Erfahrung mit GLIB macht es schwieriger.
Ich mag jede Eigenschaft als Attribut mit std bewegen get/set-Methoden, aber ich will nicht zu spät, eine Menge Veränderungen machen, zu entdecken, dass die bisherige approch war mal besser :)
Can Jemand erklärt mir, was eine Eigenschaft ist (wenn sie mit einem C++ Klassenattribut verglichen wird)? Können Sie mir ein Beispiel für eine funktionierende Eigenschaft mit Signal/Slots geben? Kann jemand die Vorteile der beiden Wege beleuchten?
Vielen Dank!
Danke für die Erklärung, ich habe versucht, den Code in C++ portieren, aber die relativen Versionen der Bindungen sind teilweise unvollständig, so dass es nur ein Durcheinander! – Gianks