mcy / best

The Best Library: a C++ STL replacement
Apache License 2.0
158 stars 1 forks source link

Improve reflection tagging #22

Closed mcy closed 2 months ago

mcy commented 2 months ago

This change updates the BestReflect() tagging API to not require the tap operator (->*) or calls to best::vals<> to manually hoist arguments into the type system.

Instead, we observe that all of the requisite information for building a type descriptor with tags is already present at constexpr time, and therefore can all be hoisted into a template <const auto&>. If we add an extra reification step, we can record field keys (e.g. ptrs-to-member) as data members in the mirror object returned by BestReflect(), put the mirror object into a constexpr variable, then pass that to the function that constructs the complete type descriptor as a non-type template argument.

Additionally, this change adds: