cppast/src/refl/template/meta_impl.liquid

41 lines
1.6 KiB
Plaintext
Raw Normal View History

2024-07-27 14:22:51 +08:00
namespace gen{
template<> struct MetaImpl<{{FullName}}, string_hash("{{MetaName}}")> : public refl::MetaHelp {
using T = {{FullName}};
consteval static int MemberCount() { return {{MemberCount}}; };
consteval static int CtorCount() { return {{CtorCount}}; };
consteval static auto Fields(){
return std::make_tuple({% for field in FieldList %}FProperty(&T::{{field.Name}},"{{field.Name}}"){% unless forloop.last %}, {% endunless %}{% endfor %});
}
static auto MakeFields() {
return std::array{
{%- for field in FieldList %}
{%- if field.Type == 1 %}
MemberField(&T::{{field.Name}}, FName("{{field.Name}}"), {{field.Meta}}),
{%- elsif field.Type == 2 %}
CtorField((T::{{field.Ref}})nullptr, {{field.Meta}}),
{%- elsif field.Type == 3 %}
MethodField(&T::{{field.Name}}, FName("{{field.Name}}"), {{field.Meta}}),
{%- else %}
MethodField((T::{{field.Ref}})&T::{{field.Name}}, FName("{{field.Name}}"), {{field.Meta}}),
{%- endif %}
{%- endfor %}
};
};
};
}
{%- if MetaType == 1 %}
namespace refl{
const UClass* Meta<{{FullName}}>::get_{{ MetaName }}()
{
static const UClass_Meta<T, gen::MetaImpl<T, string_hash("{{ MetaName }}")>> s_cls{};
return &s_cls;
};
}
{%- elsif MetaType == 2 %}
namespace refl{
inline const UClass* Meta<{{FullName}}>::get_{{ MetaName }}()
{
return &TypeInfo<T>::StaticClass;
};
}
{%- endif %}