Go to the documentation of this file.
4#ifndef QTCLASSHELPERMACROS_H
5#define QTCLASSHELPERMACROS_H
7#include <QtCore/qtconfigmacros.h>
10#pragma qt_class(QtClassHelperMacros)
11#pragma qt_sync_stop_processing
16#if defined(__cplusplus
)
19
20
21
22
23#define Q_DISABLE_COPY(Class)
24 Class(const Class &) = delete;
25 Class &operator
=(const Class &) = delete;
27#define Q_DISABLE_COPY_MOVE(Class)
29 Class(Class &&) = delete;
30 Class &operator
=(Class &&) = delete;
32#define Q_DISABLE_COPY_X(Class, reason)
33 Class(const Class &) Q_DECL_EQ_DELETE_X(reason);
34 Class &operator
=(const Class &) Q_DECL_EQ_DELETE_X(reason);
36#define Q_DISABLE_COPY_MOVE_X(Class, reason)
37 Q_DISABLE_COPY_X
(Class, reason)
38 Class(Class &&) Q_DECL_EQ_DELETE_X(reason);
39 Class &operator
=(Class &&) Q_DECL_EQ_DELETE_X(reason);
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73#define QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(Class)
74 Class &operator
=(Class &&other) noexcept {
75 Class moved(std::move(other));
80#define QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(Class)
81 Class &operator
=(Class &&other) noexcept {
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
104#define QT_DECLARE_RO5_SMF_AS_DEFAULTED(Class)
106 Class(const Class &) = default;
107 Class(Class &&) = default;
108 Class &operator
=(const Class &) = default;
109 Class &operator
=(Class &&) = default;
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129#define QT_DEFINE_TAG_STRUCT(TAG)
130 struct TAG { explicit TAG () = default; }
131#define QT_DEFINE_TAG(TAG)
132 constexpr QT_DEFINE_TAG_STRUCT
(TAG ## _t) TAG{}
135template <
typename T>
inline T *qGetPtrHelper(T *ptr)
noexcept {
return ptr; }
136template <
typename Ptr>
inline auto qGetPtrHelper(Ptr &ptr)
noexcept ->
decltype(ptr.get())
137{
static_assert(
noexcept(ptr.get()),
"Smart d pointers for Q_DECLARE_PRIVATE must have noexcept get()");
return ptr.get(); }
142 template <
typename ObjPrivate>
void assertObjectType(QObjectPrivate *d);
143 inline const QObject *getQObject(
const QObjectPrivate *d);
146#define Q_DECLARE_PRIVATE(Class)
147 inline Class##Private* d_func() noexcept
148 { Q_CAST_IGNORE_ALIGN(return reinterpret_cast<Class##Private *>(qGetPtrHelper(d_ptr));) }
149 inline const Class##Private* d_func() const noexcept
150 { Q_CAST_IGNORE_ALIGN(return reinterpret_cast<const Class##Private *>(qGetPtrHelper(d_ptr));) }
151 friend class Class##Private;
153#define Q_DECLARE_PRIVATE_D(Dptr, Class)
154 inline Class##Private* d_func() noexcept
155 { Q_CAST_IGNORE_ALIGN(return reinterpret_cast<Class##Private *>(qGetPtrHelper(Dptr));) }
156 inline const Class##Private* d_func() const noexcept
157 { Q_CAST_IGNORE_ALIGN(return reinterpret_cast<const Class##Private *>(qGetPtrHelper(Dptr));) }
158 friend class Class##Private;
160#define Q_DECLARE_PUBLIC(Class)
161 inline Class* q_func() noexcept { return static_cast<Class *>(q_ptr); }
162 inline const Class* q_func() const noexcept { return static_cast<const Class *>(q_ptr); }
164 friend const QObject *QtPrivate::getQObject(const QObjectPrivate *d);
165 template <typename ObjPrivate> friend void QtPrivate::assertObjectType(QObjectPrivate *d);
167#define Q_D(Class) Class##Private * const d = d_func()
168#define Q_Q(Class) Class * const q = q_func()
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
207#define Q_DECLARE_SHARED(TYPE) QT_DECLARE_ADL_SWAP
208 (TYPE) Q_DECLARE_TYPEINFO
209 (TYPE, Q_RELOCATABLE_TYPE);
210
212#define Q_DECLARE_SHARED_NS(NS, TYPE) QT_DECLARE_ADL_SWAP
214} Q_DECLARE_TYPEINFO
215 (NS :: TYPE, Q_RELOCATABLE_TYPE); namespace
217
219#define Q_DECLARE_SHARED_NS_EXT(NS, TYPE) namespace
220 NS { QT_DECLARE_ADL_SWAP
222} Q_DECLARE_TYPEINFO
223 (NS :: TYPE, Q_RELOCATABLE_TYPE);
224
226#define QT_DECLARE_ADL_SWAP(TYPE) inline
227 void swap(TYPE &value1, TYPE &value2)
228 noexcept(noexcept(value1.swap(value2))) \
229{value1.swap(value2); }