zengine-old/engine/3rdparty/zlib/include/refl/macro.h

54 lines
1.7 KiB
C
Raw Normal View History

2024-04-26 15:26:38 +08:00
#pragma once
2024-04-19 22:02:27 +08:00
#if !defined(__cppast)
#define __cppast(...)
2024-07-03 21:59:02 +08:00
#else
namespace engineapi {
//class Asset {};
}
2024-04-29 15:00:09 +08:00
#endif
2024-06-21 22:21:32 +08:00
#define __Meta(...) __cppast(Meta=__VA_ARGS__)
2024-04-29 15:00:09 +08:00
#define UPROPERTY(...) __Meta(__VA_ARGS__)
#define UFUNCTION(...) __Meta(__VA_ARGS__)
2024-06-21 22:21:32 +08:00
#define __vkMeta(...) __cppast(vkMeta=__VA_ARGS__)
2024-04-29 15:00:09 +08:00
#define UPROPERTY_vk(...) __vkMeta(__VA_ARGS__)
#define UFUNCTION_vk(...) __vkMeta(__VA_ARGS__)
2024-06-21 22:21:32 +08:00
#define __dxMeta(...) __cppast(dxMeta=__VA_ARGS__)
2024-04-29 15:00:09 +08:00
#define UPROPERTY_dx(...) __dxMeta(__VA_ARGS__)
2024-06-21 22:21:32 +08:00
#define UFUNCTION_dx(...) __dxMeta(__VA_ARGS__)
2024-07-06 18:04:51 +08:00
#define __glMeta(...) __cppast(glMeta=__VA_ARGS__)
#define UPROPERTY_gl(...) __glMeta(__VA_ARGS__)
#define UFUNCTION_gl(...) __glMeta(__VA_ARGS__)
2024-06-21 22:21:32 +08:00
// 辅助宏,用于实际拼接
#define CONCATENATE(arg1, arg2) CONCATENATE_IMPL(arg1, arg2)
#define CONCATENATE_IMPL(arg1, arg2) arg1##arg2
#define MY_UNIQUE_NAME(base) CONCATENATE(base, __LINE__)
#define USING_CTOR_NAME MY_UNIQUE_NAME(__Ctor)
#define USING_FUNC_NAME MY_UNIQUE_NAME(__Func)
#define USING_OVERLOAD_CTOR(Class, ...) using USING_CTOR_NAME = Class(*)(__VA_ARGS__);
#define USING_OVERLOAD_FUNC(R, ...) using USING_FUNC_NAME = R(*)(__VA_ARGS__);
#define USING_OVERLOAD_CLASS_FUNC(R, Class, ...) using USING_FUNC_NAME = R(Class::*)(__VA_ARGS__);
2024-06-25 20:26:46 +08:00
2024-07-02 22:17:53 +08:00
#define REGISTER_META_TABLE(Class) refl::UClass::MetaTable.emplace(type_name<Class>().View(), &refl::TypeInfo<Class>::StaticClass);
2024-07-03 19:51:47 +08:00
#define REFL_FRIEND(Class) friend class refl_impl::_Static<Class, refl_impl::Meta>;\
friend class refl_impl::_Meta<Class, refl_impl::Meta>;
2024-06-25 20:26:46 +08:00
/*
struct vec3{
USING_OVERLOAD_CTOR(vec3)
UFUNCTION({},ref = USING_CTOR_NAME)
vec3(){}
}
*/
2024-06-21 22:21:32 +08:00
namespace refl_impl {
struct Meta {};
struct vkMeta {};
struct dxMeta {};
2024-07-06 18:04:51 +08:00
struct glMeta {};
2024-06-21 22:21:32 +08:00
}