<QTypeInfo>プロキシページ

マクロ

Q_DECLARE_TYPEINFO(Type, Flags)

マクロ・ドキュメント

Q_DECLARE_TYPEINFO(Type, Flags)

このマクロを使用すると、カスタム型Type に関する情報を指定できます。正確な型情報があれば、Qtのジェネリックコンテナは適切な格納方法やアルゴリズムを選択することができます。

Flags には以下のいずれかを指定します:

  • Q_PRIMITIVE_TYPE は、 が適切に破棄されるために実行される操作は必要なく、オブジェクトの有効な独立したコピーを作成するために memcpy() を使用することが可能であることを指定します。Type
  • Q_RELOCATABLE_TYPE は、 がコンストラクタおよび/またはデストラクタを持つが、 を使うことでメモリ上にType memcpy()再配置できることを指定する。
  • Q_MOVABLE_TYPE は と同じです。新しいコードでは を使用することをお勧めします。注意:この名前は、移動コンストラクタやC++の移動セマンティクスとは関係ありません。Q_RELOCATABLE_TYPE Q_RELOCATABLE_TYPE
  • Q_COMPLEX_TYPE (デフォルト) は、 がコンストラクタおよび/またはデストラクタを持ち、メモリ内で移動できないことを指定します。Type

プリミティブ」型の例:

struct Point2D
{
    int x;
    int y;
};

Q_DECLARE_TYPEINFO(Point2D, Q_PRIMITIVE_TYPE);

PODでない「プリミティブ」型の例は、QUuid です:QUuid にはコンストラクタがあり(したがってPODではありません)、すべてのビット・パターンが有効なオブジェクトを表しています。QUuid オブジェクトの有効な独立したコピーを作成するには、memcpy()を使用できます。

リロケータブル型の例:

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の候補となる型はたくさんありますが、些細なことでコピー可能ではありません。

©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。