35 #include <QVariantMap>
47 QHash<int, Introspect_f> Intros_;
56 template<
typename T,
typename U>
57 void Register (
const U& intro, decltype (
Invoke (intro, std::declval<QVariant> ()))* =
nullptr)
59 const auto id = qMetaTypeId<T> ();
63 template<
typename T,
typename U>
64 void Register (
const U& intro, decltype (
Invoke (intro, std::declval<T> ()))* =
nullptr)
66 Register<T> ([intro] (
const QVariant& var) {
return Invoke (intro, var.value<T> ()); });
70 QVariantMap operator() (
const T& t)
const
72 return (*
this) (QVariant::fromValue<T> (t));
75 QVariantMap operator() (
const QVariant&)
const;
std::function< QVariantMap(QVariant)> Introspect_f
void Register(const U &intro, decltype(Invoke(intro, std::declval< T >()))*=nullptr)
auto Invoke(F &&f, Args &&...args) -> decltype(std::forward< F >(f)(std::forward< Args >(args)...))
void Register(const U &intro, decltype(Invoke(intro, std::declval< QVariant >()))*=nullptr)