Документация
Reflic-CPP-это библиотека только для заголовка, которая обеспечивает возможности для размышлений и самоанализа для COMPLIENT для C ++. Благодаря кодированию метаданных типов в системе типов, Refly-CPP позволяет обрабатывать типы и их поля и функции с помощью метапрограммирования ContexPR и шаблона.
Используете Refly-CPP в вашем проекте? Я хочу услышать об этом: свяжитесь со мной по электронной почте (см. Мой профиль), откройте проблему или добавьте тег #Reflic-CPP в ваши темы!
Есть вопрос? Попробуйте спросить в канале Gitter.
Хотите поддержать Refly-CPP? Подумайте о пожертвовании.
Reflic-CPP стремится обеспечить общую систему отражения, которая достаточно гибкая, чтобы удовлетворить ваши потребности, сохраняя при этом относительно небольшую поверхность API.
Некоторые хорошие вещи, которые отражает, поддерживает вне коробки:
std::tuple s, связанные с типами и дескрипторами участниковproxy<T> с теми же элементами, что и T , которые можно использовать для обертывания или расширения функциональностиРеализуйте простую систему сериализации - Пример -сериализация.cpp - Просмотр в компиляторе проводет реализует эффективную процедуру общей сериализации с нуля
Простая абстракция базы данных SQL - Пример DAO.CPP - Просмотр в компиляторах Explorer реализует базовую систему ORM, которая может генерировать операторы SQL во время компиляции из классов моделей с использованием пользовательских свойств
Основные классы итерации с bases<> - Пример inheritance.cpp - Просмотр в компиляторе Explorer использует встроенные bases<> атрибут Iteater по сравнению с базовыми классами типа
Информация об отражении доступа во время выполнения -Пример-custom-rtti.cpp-Просмотр в компиляторе проводет реализует базовую абстракцию времени выполнения по сравнению с Reflic-CPP, которая обеспечивает доступ к метаданным отражению во время выполнения с помощью пользовательских объектов метаданных
GUI на основе XML со свойствами сильно типа -Пример-binding.cpp-Просмотр в компиляторе проводет внедрение системы для чтения ресурсов XML с помощью Reflic-CPP, создав пользовательский уровень отражения среды.
Реализовать фабрику класса Generic Builder - Пример Builders.cpp - Просмотр в компиляторе Explorer определяет общий класс builder<T> , который реализует шаблон застройщика для любого типа T .
Преобразовать поля в методы аксессуара - Пример proxy.cpp - View в компиляторе Explorer использует функцию прокси для создания общего типа value_proxy<T> , которая обнажает все поля T с помощью методов доклада
Посмотреть массив структур в качестве структуры массивов struct_of_arrays<T> пример- std::vector T ареска T operator[](int)
Сгенерировать структуру std::optional участники - Пример -partials.cpp - View in Compiler Explorer использует функцию прокси для создания общего типа partial<T> , который завершает все члены T в std::optional
Я начал разрабатывать Refly-CPP во время моего последнего года в старшей школе. Я должен был учиться на экзаменах, но я только что прочитал предложение «Оригинальное статическое отражение» (2017), и, поняв, что оно не произойдет в ближайшее время, я решил, что должен попытаться втиснуть как можно больше этих функций в возможных в библиотеку компиляции.
Библиотека выросла и сильно изменилась с первых дней, но даже через несколько лет я до сих пор не видел другой библиотеки отражений, которая поддерживает метапрограммирование ContexPR и шаблона. С другими библиотеками вам часто приходится ходить по структуре метаданных во время выполнения, вызовы функции и использовать тип С Reful-CPP вы обрабатываете метаданные типа во время компиляции, через циклы for_each , все типы есть, и компилятор может часто встроить все и генерировать тот же код, который вы бы написали вручную.
Все функции утилиты в Refly-CPP являются contexPR (кроме тех, которые в refl::runtime ). Компиляторы, как правило, будут внедрять все петли и другие конструкции (при использовании -O2 ) и генерируют код, который работает так же быстро, как если бы он был написан вручную.
Благодаря некоторым специальным оптимизациям времени компиляции, метаданные типа, как правило, не создаются экземплярами (не требуется кодового генерала), когда сами типы не используются в отражении. С 0,12,2, было также некоторое значительное сокращение времени компиляции при использовании свойств № 60.
При этом, слово предостережения: я заметил, что после того, как примерно 250 отраженных членов отмечают, время компиляции начинают быстро расти. Если ваша кодовая база содержит множество огромных классов (+250 функций), и вам нужно , чтобы все они отражались с refl-cpp , это может быть прерывателем сделки - эталон перед использованием.
Чтобы использовать Reflic-CPP в качестве библиотеки с одним заголовком, копия include/refl.hpp в ваш каталог включения.
Вы также можете потреблять Refly-CPP в качестве зависимости CMAKE (3,14+ требуется, спасибо @friendlyanon).
vcpkg install refl-cpp (спасибо @Vennor)conan install refl-cpp Онлайн -документация построена с доксигеном. Запустите doxygen Doxyfile в docs/ чтобы обновить его.
Запустите Cmake с -Drefl-cpp_DEVELOPER_MODE=ON и сделайте целевую цель refl-cpp-tests .
Запустите Cmake с -Drefl-cpp_DEVELOPER_MODE=ON флаге. Вы также можете настроить пользовательскую предустановку для более удобного опыта разработчика (см. Этот комментарий на № 44).