A C++ reflection system with a Clang-based parser and runtime library for type introspection and metadata generation.
C++ Reflection is a two-component system that adds runtime reflection capabilities to C++ programs. It consists of a parser that analyzes C++ source code using libClang and a runtime library that provides type introspection and metadata access. This enables developers to query and manipulate type information dynamically, which is particularly useful for serialization, editor tooling, and game development.
C++ developers working on game engines, editor tools, or applications requiring runtime type introspection and metadata systems. It's especially relevant for those building serialization frameworks, scripting systems, or data-driven architectures.
Developers choose C++ Reflection because it provides a practical, battle-tested reflection solution derived from real game development experience. Unlike many academic or experimental reflection libraries, it offers a complete pipeline with a robust parser and lightweight runtime, making it suitable for production use.
C++ Reflection Parser / Runtime Skeleton
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Uses LLVM's libClang to accurately parse C++ source files, ensuring reliable extraction of type information without manual annotation, as highlighted in the README's Clang-based parser feature.
Developed from real game engine experience, providing a practical reflection API suitable for production use in serialization and tooling, emphasized in the blog and examples.
Built with CMake for seamless integration on Windows, Linux, and macOS, making it adaptable to diverse development environments, as detailed in the build instructions.
Includes examples and a detailed blog series that walks through the development process, offering insights beyond just code, which the author mentions to supplement documentation.
Requires manual installation of specific versions of LLVM and Boost, which the author acknowledges as tedious and 'sucks', adding significant setup overhead.
The README states no immediate plans for interface documentation, forcing users to rely on examples and blog posts for guidance, which can hinder adoption.
Depends on LLVM 3.8 and Boost 1.59, which are older versions that may not support modern C++ features or have security updates, limiting compatibility.