35 #include <QVariantMap>
42 using Introspect_f = std::function<QVariantMap (QVariant)>;
46 QHash<int, Introspect_f> Intros_;
48 Introspectable () =
default;
50 Introspectable (
const Introspectable&) =
delete;
51 Introspectable& operator= (
const Introspectable&) =
delete;
53 static Introspectable& Instance ();
55 template<
typename T,
typename U>
56 void Register (
const U& intro, std::result_of_t<U (QVariant)>* =
nullptr)
58 const auto id = qMetaTypeId<T> ();
62 template<
typename T,
typename U>
63 void Register (
const U& intro, std::result_of_t<U (T)>* =
nullptr)
65 Register<T> ([intro] (
const QVariant& var) {
return std::invoke (intro, var.value<T> ()); });
69 QVariantMap operator() (
const T& t)
const
71 return (*
this) (QVariant::fromValue<T> (t));
74 QVariantMap operator() (
const QVariant&)
const;