Skip to content

1.2. Overview: How To...

Justin F edited this page Mar 22, 2023 · 22 revisions

Reflecting Members:

Notes / Annotations:

Reflecting Inheritance:

Reflecting Functions:

Reflecting Overloads:

Misc:

Adaptive Structures:

RareBuilder:

RareMapper:

RareJson:

Define, iterate & modify class members

source file Define, Iterate & Modify

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");
    });
}

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

Member annotations

Class-level annotations

Anonymous annotations

Filtered notes has/get/forEach

Define & iterate super-classes

Access super-class by constexpr index

Access super-class by runtime index

Traversing inheritance trees

Define, iterate & call functions

Get argument & return types

Iteratively build arguments & call function

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

Type toStr

Runtime to constexpr index

White-box testing

Making tuples

Clone reflected structure

Typedefs per reflected structure member

Implementing whiteboxer/reference structure

Implementing builders

Implementing change-listeners

Implementing object-mappers

Simple builder

Validated builders

Aggregated builders

Trivial mapping

Custom-field mapping

Using standard mappings

Basic JSON I/O

JSON customization

Unknown fields

Clone this wiki locally