20 constexpr
Literal (
const char (&s) [N])
26 template<Literal RoleArg, auto GetterArg>
27 struct RoledMemberField
29 static constexpr
auto Getter = GetterArg;
30 static constexpr
auto Role = RoleArg;
33 template<Literal RoleArg, auto GetterArg>
41 using FieldsList_t = QVector<QPair<QByteArray, FieldGetter_t>>;
43 const QVector<FieldGetter_t> Fields_;
44 const QHash<int, QByteArray> Roles_;
46 template<
typename... Fields>
49 ,
Fields_ { +[] (
const T& t) -> QVariant {
return t.*(Fields::Getter); }... }
50 , Roles_ { MakeRoles ({ QByteArray { Fields::Role.Chars_ }... }) }
54 QHash<int, QByteArray>
roleNames ()
const override
59 QVariant
GetData (
int row,
int,
int role)
const override
61 if (
const auto getter =
Fields_.value (role - this->DataRole - 1))
62 return getter (this->
Items_.at (row));
66 QHash<int, QByteArray> MakeRoles (QVector<QByteArray>
fields)
const
69 result.reserve (result.size () +
fields.size ());
70 for (
int i = 0; i <
fields.size (); ++i)