A small and simple C++ Reflection Library
- Allocate any type of Class by its ID handle (using std::new), if a default constructor is available
- Access primitive ClassMembers without knowing the ClassType during compile-time
- Access RunTimeTypeInformation (RTTI) using little to none Boilerplate code
Allocate any type of Class by its ID handle, if a default constructor is available
#include "ReflectCPP.h"
using namespace rfl;
struct MyClass
{
RFL_CLASS(MyClass);
MyClass() = default;
// ...
};
int main()
{
Class cls = MyClass::StaticClass();
// Create an instance anytime during runtime
void* inst = cls.NewInstance();
}
Access primitive ClassMembers without knowing the ClassType during compile-time
#include "ReflectCPP.h"
using namespace rfl;
struct MyClass
{
RFL_CLASS(MyClass,
{
RFL_FIELD(MyClass, int, myValue);
});
MyClass(int val) : myValue(val) { }
int myValue;
};
int main()
{
MyClass inst = MyClass(13);
auto fields = MyClass::StaticClass().GetClassReflector().GetFields();
for (auto& It : fields)
{
std::cout << It.m_Name << " " << (uint32_t)It.m_Type << " " << It.m_Offset << std::endl;
// Increment ClassMember variable indirectly...
int& ref = It.GetFieldRefFromObject<int>(&inst);
ref++;
}
}
- C++17 Compiler
- Include the ReflectCPP.h anywhere you want to use it
- Compile and link the ReflectCPP.cpp Translation Unit
- No external Libraries needed!
- Everything is pure C++