-
Notifications
You must be signed in to change notification settings - Fork 7
1.2. Overview: How To...
Justin F edited this page Mar 22, 2023
·
22 revisions
Reflecting Members:
- Define, iterate & modify class members
- Access class members by constexpr index
- Access class members by runtime index
- Access class members by name
- Get member access protection modifier
- Get member metadata using identifier
- Pack & fold class members
- Filter members using constexpr ifs
- Filter members using predicate filtering
- Reflect members outside of class
Notes / Annotations:
Reflecting Inheritance:
- Define & iterate super-classes
- Access super-class by constexpr index
- Access super-class by runtime index
- Traversing inheritance trees
Reflecting Functions:
Reflecting Overloads:
- Define, iterate & call overloads
- Access known overload by constexpr index
- Access known overload by runtime index
- Pack known overloads
- Access unknown overload (non-noted argument set)
- Working with cv-ref qualified overloads
Misc:
Adaptive Structures:
- Clone reflected structure
- Typedefs per reflected structure member
- Implementing whiteboxer/reference structure
- Implementing builders
- Implementing change-listeners
- Implementing object-mappers
RareBuilder:
RareMapper:
RareJson:
class MyObj
{
int myInt = 3;
char myChar = 'A';
public:
REFLECT(MyObj, myInt, myChar)
};
void memberDefineIterateModify()
{
MyObj myObj{};
RareTs::Members<MyObj>::forEach(myObj, [&](auto & member, auto & value) { // Supplying an instance of MyObj, incrementing and printing the values
std::cout << member.name << " = " << ++value << std::endl;
});
RareTs::Members<MyObj>::forEach([&](auto & member) { // Same thing, but providing the instance of MyObj to member to get the value
std::cout << member.name << " = " << ++member.value(myObj) << std::endl;
});
RareTs::Values<MyObj>::forEach(myObj, [&](auto & value) { // Similar, but only accessing the value of the member/no metadata like member name is available
std::cout << ++value << std::endl;
});
const MyObj & constRef = myObj;
RareTs::Values<MyObj>::forEach(constRef, [&](auto & value) { // Note: const correct, value is const if the member declaration or object instance is const
static_assert(std::is_const_v<std::remove_reference_t<decltype(value)>>, "const check");
});
}