10#include "LkEngine/Core/Template/TypeTrait.h"
21 using FObjectCastFunction = std::function<
void*(
LObjectBase*)>;
24 explicit LClass(std::string_view InName,
const std::type_index& InTypeID, FObjectCastFunction InCastFunction)
27 , CastFunction(std::move(InCastFunction))
37 FORCEINLINE
const std::string&
GetName()
const
45 [[nodiscard]] FORCEINLINE
const std::type_index&
GetTypeID()
const
53 static const LClass*
Get(
const std::type_index& ClassType)
55 if (
auto Iter = ClassMetadataMap.find(ClassType); Iter != ClassMetadataMap.end())
57 return Iter->second.get();
69 static_assert(
sizeof(T) > 0,
"Register failed, incomplete type T");
70 if (ClassMetadataMap.contains(
typeid(T)))
72 return ClassMetadataMap[
typeid(T)].get();
75 ClassMetadataMap[
typeid(T)] = std::make_unique<LClass>(ClassName,
typeid(T), [](
LObjectBase* ClassObject) ->
void*
77 return static_cast<T*
>(ClassObject);
80 LClass* Class = ClassMetadataMap[
typeid(T)].get();
81 Class->bRegistered =
true;
86 bool operator==(
const LClass& Other)
const
88 return (TypeID == Other.TypeID);
102 bool IsChildOf(
const LClass* OtherClass)
const;
105 bool IsChildOf()
const
107 static_assert(
sizeof(T) > 0,
"IsChildOf failed, incomplete type T");
108 return IsChildOf(T::StaticClass());
113 std::type_index TypeID;
114 FObjectCastFunction CastFunction;
116 bool bRegistered =
false;
119 inline static std::unordered_map<std::type_index, std::unique_ptr<LClass>> ClassMetadataMap{};
Core macros used by the entire engine.
LObject base implementation.
static LClass * Register(std::string_view ClassName)
Register metadata for a LClass.
Definition Class.h:67
FORCEINLINE bool IsRegistered() const
Check if class is registered in the static storage.
Definition Class.h:94
FORCEINLINE const std::string & GetName() const
Get name of class.
Definition Class.h:37
static const LClass * Get(const std::type_index &ClassType)
Retrieve metadata for a LClass.
Definition Class.h:53
FORCEINLINE const std::type_index & GetTypeID() const
Get type ID.
Definition Class.h:45
Definition ObjectBase.h:57