6 #ifndef SWIFT_MISC_METACLASS_H
7 #define SWIFT_MISC_METACLASS_H
10 #include <type_traits>
13 #include <QLatin1String>
28 #if defined(Q_OS_WIN) && defined(Q_CC_GNU)
29 # define SWIFT_NO_EXPORT_CONSTEXPR constexpr inline __attribute__((always_inline))
31 # define SWIFT_NO_EXPORT_CONSTEXPR constexpr
37 # define SWIFT_TRAILING_VA_ARGS(...) , __VA_ARGS__
39 # define SWIFT_TRAILING_VA_ARGS(...) , ##__VA_ARGS__
52 #define SWIFT_METACLASS(CLASS, ...) \
53 friend struct swift::misc::private_ns::CMetaClassAccessor; \
54 struct MetaClass : public swift::misc::CMetaClass \
56 using Class = CLASS; \
57 SWIFT_NO_EXPORT_CONSTEXPR static auto getMemberList() { return makeMetaMemberList(__VA_ARGS__); } \
72 #define SWIFT_METAMEMBER(MEMBER, ...) makeMetaMember(&Class::m_##MEMBER, #MEMBER SWIFT_TRAILING_VA_ARGS(__VA_ARGS__))
80 #define SWIFT_METAMEMBER_NAMED(MEMBER, NAME, ...) \
81 makeMetaMember(&Class::m_##MEMBER, NAME SWIFT_TRAILING_VA_ARGS(__VA_ARGS__))
116 struct MetaFlags :
public std::integral_constant<quint64, F>
119 constexpr
operator std::bool_constant<static_cast<bool>(F)>()
const {
return {}; }
126 template <qu
int64 A, qu
int64 B>
136 template <qu
int64 A, qu
int64 B>
146 template <
typename M, qu
int64 Flags>
163 template <
typename Flags2>
164 static constexpr
bool has(Flags2 flags)
170 template <
typename T,
typename... Ts>
171 decltype(
auto)
in(T &&
object, Ts &&...args)
const
173 return std::invoke(
m_ptr, std::forward<T>(
object), std::forward<Ts>(args)...);
184 template <
typename... Members>
191 static constexpr
size_t c_size =
sizeof...(Members);
232 template <
typename... Members>
235 return { { { { members }... } } };
240 template <
typename M, qu
int64 Flags = 0>
244 static_assert(std::is_member_object_pointer_v<M>,
"M must be a pointer to member object");
245 return { ptrToMember, name, index, flags };
254 template <
typename MetaClass>
259 template <
typename F>
262 MetaClass::getMemberList().m_members.for_each(std::forward<F>(visitor));
269 struct CMetaClassAccessor
271 template <
typename T>
272 constexpr
static auto getIntrospector()
274 return CMetaClassIntrospector<typename T::MetaClass>();
284 template <
typename T>
287 return private_ns::CMetaClassAccessor::getIntrospector<T>();
Free functions in swift::misc.
QString fromStdString(const std::string &str)
Simple literal type containing a single QLatin1String.
const QLatin1String m_latin1
Embedded string.
constexpr CExplicitLatin1String(QLatin1String s)
Implicit constructor.