16 template <
typename TList,
typename F>
19 std::apply([&](
auto &...members)
20 { (f(members), ...); }, obj_member_list);
37#define DNDS_MAKE_1_MEMBER_REF(x) \
41 template <
typename Class,
typename TList,
typename F>
44 std::apply([&](
auto &...member_ptr)
45 { (f(member_ptr.name, obj.*(member_ptr.ptr)), ...); }, obj_member_ptr_list);
50 template <
typename TList,
typename F>
53 std::apply([&](
auto &...members)
54 { (f(members), ...); }, obj_member_ptr_list);
59 template <
typename Class,
typename T>
67 template <
typename Class,
typename T>
71#define DNDS_MAKE_1_MEMBER_PTR(Class, member) \
72 MemberPtr { &Class::member, #member }
76#define DNDS_MAKE_1_MEMBER_PTR_SELF(member) \
77 MemberPtr { &t_self::member, #member }
Core type aliases, constants, and metaprogramming utilities for the DNDS framework.
the host side operators are provided as implemented
void for_each_member_ptr_list(Class &obj, TList &&obj_member_ptr_list, F &&f)
Invoke f(name, obj.*ptr) for every member in a list of MemberPtr.
void for_each_member_ptr_list_raw(TList &&obj_member_ptr_list, F &&f)
Low-level variant that passes each MemberPtr object through to f directly (for callers that need acce...
void for_each_member_list(TList &&obj_member_list, F &&f)
Invoke f(member) for every element of a std::tuple of members.
Pointer-to-member wrapper with a symbolic name; the pointer-based cousin of MemberRef used when the o...
t_member_ptr ptr
Pointer-to-member.
const char * name
Compile-time-known member name.
Simple {reference, name} bundle for a struct member.
const char * name
Compile-time-known member name.
T & ref
Reference to the member.