22 std::copy_n (s, N,
Chars_);
26 template<Literal RoleArg, auto GetterArg>
29 static constexpr
auto Getter = GetterArg;
30 static constexpr
auto Role = RoleArg;
33 template<Literal RoleArg, auto GetterArg>
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_ }... }) }
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)
QVector< QPair< QByteArray, FieldGetter_t > > FieldsList_t
QHash< int, QByteArray > roleNames() const override
QVariant GetData(int row, int, int role) const override
static constexpr auto Getter
QModelIndex parent(const QModelIndex &) const override
RoledMemberField< RoleArg, GetterArg > RoledMemberField_v
constexpr Literal(const char(&s) [N])
static constexpr auto Role
auto Tup2 &&tup2 noexcept
constexpr detail::MemberPtrs< Ptrs... > fields
QVariant(*)(const T &) FieldGetter_t
static constexpr auto DataRole
RoledItemsModel(QObject *parent, Fields...) noexcept