#pragma once /* #define REGISTER_CLASS(cls) using _T = cls; #define MAKE_STATIC_FIELD(member, ...) \ MakeStaticField(&_T::member, #member, __VA_ARGS__) #define MAKE_FIELD(member, ...) \ Field<_T>::MakeField(&_T::member, #member, __VA_ARGS__) #define REGISTER_FIELDS()\ consteval static auto __MakeStaticFields() {\ return std::array{\ MAKE_FIELD_LIST(MAKE_STATIC_FIELD)\ };\ }\ static auto __MakeFields() {\ return std::array{\ MAKE_FIELD_LIST(MAKE_FIELD)\ };\ } #define MAKE_FIELD_LIST(MACRO) \ MACRO(x), \ MACRO(y), \ MACRO(z), \ MACRO(norm, {10,9}), \ MACRO(norm1, {1}), \ MACRO(norm2, {2}), REGISTER_CLASS(vec3) REGISTER_FIELDS() #undef MAKE_FIELD_LIST */