<QTypeInfo> 代理页面

Q_DECLARE_TYPEINFO(类型, 标志)

宏文档

Q_DECLARE_TYPEINFO(类型, 标志)

您可以使用此宏来指定有关自定义类型 类型 的信息。使用准确类型信息,Qt 的 通用容器 可以选择合适的存储方法和算法。

标志 可以是以下之一

  • Q_PRIMITIVE_TYPE 表示 类型 可以通过将其存储初始化为零来创建,不需要操作即可正确销毁,并且对于使用 memcpy() 创建的对象创建有效独立的副本。
  • Q_RELOCATABLE_TYPE 表示 类型 具有构造函数和/或析构函数,但可以使用 memcpy() 在内存中移动。
  • Q_MOVABLE_TYPEQ_RELOCATABLE_TYPE 相同。在新代码中应优先使用 Q_RELOCATABLE_TYPE。注意:尽管名称如此,但这与移动构造函数或 C++ 移动语义无关。
  • Q_COMPLEX_TYPE(默认值)表示 类型 具有构造函数和/或析构函数,并且可能在内存中移动。

"原始" 类型的示例

struct Point2D
{
    int x;
    int y;
};

Q_DECLARE_TYPEINFO(Point2D, Q_PRIMITIVE_TYPE);

非 POD "原始" 类型的示例是 QUuid:尽管 QUuid 具有构造函数(因此不是 POD),但每个位模式都代表一个有效的对象,并且可以使用 memcpy() 创建 QUuid 对象的有效独立副本。

可移动类型的示例

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 将尝试检测类型的类,使用标准 C++ 类型特性;使用此宏来调整行为。例如,许多类型都会成为 Q_RELOCATABLE_TYPE 的候选者,尽管它们不是 trivially-copyable。

© 2024 The Qt Company Ltd。此处包含的文档贡献版权归其各自所有者。本处提供的文档受 GNU 自由文档许可证版本 1.3 的条款约束,由自由软件基金会发布。Qt 和相应标志是 The Qt Company Ltd 在芬兰和/或全球其他国家的商标。所有其他商标均为其各自所有者的财产。