<QTypeInfo> Proxy-Seite
Makros
Q_DECLARE_TYPEINFO(Type, Flags) |
Makro-Dokumentation
Q_DECLARE_TYPEINFO(Type, Flags)
Sie können dieses Makro verwenden, um Informationen über einen benutzerdefinierten Typ Type anzugeben. Mit genauen Typinformationen können die generischen Container von Qt geeignete Speichermethoden und Algorithmen auswählen.
Flags kann einer der folgenden Werte sein:
Q_PRIMITIVE_TYPE
gibt an, dass Type keine Operation benötigt, um ordnungsgemäß zerstört zu werden, und dass es möglich ist, memcpy() zu verwenden, um eine gültige unabhängige Kopie eines Objekts zu erstellen.Q_RELOCATABLE_TYPE
gibt an, dass Type einen Konstruktor und/oder einen Destruktor hat, aber dennoch mitmemcpy()
im Speicher verschoben werden kann.Q_MOVABLE_TYPE
ist dasselbe wieQ_RELOCATABLE_TYPE
. Bevorzugen Sie die Verwendung vonQ_RELOCATABLE_TYPE
in neuem Code. Hinweis: Trotz des Namens hat dies nichts mit Move-Konstruktoren oder C++ Move-Semantik zu tun.Q_COMPLEX_TYPE
(die Voreinstellung) gibt an, dass Type Konstruktoren und/oder einen Destruktor hat und dass es nicht im Speicher verschoben werden darf.
Beispiel für einen "primitiven" Typ:
struct Point2D { int x; int y; }; Q_DECLARE_TYPEINFO(Point2D, Q_PRIMITIVE_TYPE);
Ein Beispiel für einen nicht-POD-"primitiven" Typ ist QUuid: Obwohl QUuid Konstruktoren hat (und daher nicht POD ist), stellt jedes Bitmuster immer noch ein gültiges Objekt dar, und memcpy() kann verwendet werden, um eine gültige unabhängige Kopie eines QUuid -Objekts zu erstellen.
Beispiel für einen relocatable Typ:
class Point2D { public: Point2D() { data = new int[2]; } Point2D(const Point2D &other) { ... } ~Point2D() { delete[] data; } Point2D &operator=(const Point2D &other) { ... } int x() const { return data[0]; } int y() const { return data[1]; } private: int *data; }; Q_DECLARE_TYPEINFO(Point2D, Q_RELOCATABLE_TYPE);
Qt versucht, die Klasse eines Typs anhand von Standard-C++-Type-Traits zu erkennen; verwenden Sie dieses Makro, um das Verhalten abzustimmen. Zum Beispiel wären viele Typen Kandidaten für Q_RELOCATABLE_TYPE, obwohl sie nicht trivial kopierbar sind.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.