Я тут с начала октября пишу свою реализацию с Compile-time рефлексии, и у меня в итоге появились первые результаты работы. Что в ней есть:
- Счетчики методов/переменных
- Получение/присвоение переменных через индекс
- Поиск переменных по имени
- Получение типа переменной
- статичные переменные
- Получение имени класса
- запуск методов через индекс
- получение типа возвращаемого значения метода, получение типов входных аргументов
- константный методы
- статичные методы
- Поиск методов по имени
- попытка запустить кучу методов (там кортеж из индексов на вход идёт) с данными аргументами, неудача не ведет к ошибки компиляции(sfinae)
- Получение имени переменной/метода
Я пока не делал документацию, и оформление кода хромает. Но это все уже активно пилится. Зависимости: boost.hana, boost.type_index (только в первом примере используется). Из С++1z: Поддержка if constexpr (), std::conjunction.
Подробности:
Скриншот выхлопа первого примера
Скриншот выхлопа второго примера
P.S: Да макросы и не красиво, но с таким функционал без них никак не обойтись.
P.S.S: В файле utils можно убрать namespace std {...} если у Вас std::is_*_v уже в стандартной библиотеке определены.
P.S.S.S: лицензия GPLv3.