zengine-old/engine/3rdparty/zlib/include/refl/refl.h
2024-04-13 17:47:44 +08:00

58 lines
2.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "detail/uclass.inl"
#include "detail/view.inl"
#include "detail/field.inl"
namespace refl {
/* 成员变量需要定义默认值吗那为什么不在initObjec里初始化?*/
template<typename T, typename Obj>
consteval FieldPtr MakeStaticField(T Obj::* ptr, Name name) {
FieldPtr::Default value;
FieldPtr::Data member = { nullptr };
constexpr uint32_t flag = FIELD_MEMBER_FLAG | FIELD_ATTRIBUTE_FLAG;
return { name, &TypeInfo<T>::StaticClass, member, value, flag };
}
template<typename R, typename ...Args>
consteval FieldPtr MakeStaticField(R(*ptr)(Args...), Name name/*, const std::vector<ArgsValue>& args = {}*/) {
uint32_t flag = FIELD_METHOD_FLAG;
FieldPtr::Default value;
/*if (args.size() > 0) {
flag |= FIELD_METHOD_VALUE_FLAG;
static const ArgsValueList argsValue(args);
value.method = []() ->std::pair<ArgsView*, int> {
return { argsValue.ptr , argsValue.num };
};
}*/
FieldPtr::Data method = { nullptr };
return { name, &TypeInfo<real_type_t<R>(*)(real_type_t<Args>...)>::StaticClass, method, value, flag };
}
template<typename T, typename R, typename ...Args>
consteval FieldPtr MakeStaticField(R(T::* ptr)(Args...), Name name/*, const std::vector<ArgsValue>& args = {}*/) {
uint32_t flag = FIELD_MEMBER_FLAG | FIELD_METHOD_FLAG;
FieldPtr::Default value;
/*if (args.size() > 0) {
flag |= FIELD_METHOD_VALUE_FLAG;
static const ArgsValueList argsValue(args);
value.method = []() ->std::pair<ArgsView*, int> {
return { argsValue.ptr , argsValue.num };
};
}*/
//Method fptr = nullptr;
FieldPtr::Data method = { nullptr };
return { name, &TypeInfo<real_type_t<R>(*)(const void*,real_type_t<Args>...)>::StaticClass, method, value,flag };
}
template<typename ...Args>
consteval auto MakeTuple(Args&&... args) {
return std::make_tuple(args...);
}
template<typename ...Args>
auto MakeStaticFields(const std::tuple<Args...>& args) {
constexpr std::size_t N = sizeof...(Args);
std::array<FieldPtr, N> fields{};
for (std::size_t i = 0; i < N; ++i) {
auto& arg = std::get<0>(args);
auto a1 = std::get<0>(arg);
auto a2 = std::get<1>(arg);
//fields[i] = MakeStaticField(std::get<0>(arg), std::get<1>(arg));
}
return fields;
}
}