This commit is contained in:
aozhiwei 2022-12-21 14:01:38 +08:00
parent 966f7119e7
commit d33036398d
2 changed files with 46 additions and 9 deletions

View File

@ -1,9 +1,21 @@
#pragma once
#include <assert.h>
#include <type_traits>
namespace a8
{
namespace reflect
{
class Class;
}
struct ReflectibleObject
{
a8::reflect::Class *metaclass = NULL;
};
namespace reflect
{
@ -13,10 +25,11 @@ namespace a8
ET_UINT32 = 2,
ET_INT64 = 3,
ET_UINT64 = 4,
ET_DOUBLE = 5,
ET_STRING = 6,
ET_CLASS = 7,
ET_INTERFACE = 8,
ET_FLOAT = 5,
ET_DOUBLE = 6,
ET_STRING = 7,
ET_CLASS = 8,
ET_INTERFACE = 9,
};
enum FieldSubType
@ -80,6 +93,26 @@ namespace a8
return tag_;
}
void SetSimpleField(
int fieldidx,
const char* fieldname,
int type,
int offset
)
{
SetField(fieldidx,
fieldname,
type,
a8::reflect::EST_SIMPLE,
offset,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr);
}
void SetField(int fieldidx,
const char* fieldname,
int type,
@ -197,7 +230,7 @@ namespace a8
#define BEGIN_MSG_CLASS(classname, fieldnum) \
{ \
a8::reflect::Class *metaclass = new a8::reflect::Class(#classname, fieldnum, classname::CLSID); \
a8::reflect::Class *metaclass = new a8::reflect::Class(#classname, fieldnum, 0); \
metaclass->create =&a8::reflect::_create<classname>; \
metaclass->destroy =&a8::reflect::_destroy<classname>; \
metaclass->copy =&a8::reflect::_copy<classname>; \
@ -209,13 +242,13 @@ namespace a8
#define BEGIN_MFMSG_CLASS(classname, fieldnum) \
{ \
a8::reflect::Class *metaclass = new a8::reflect::Class(#classname, fieldnum, classname::CLSID); \
a8::reflect::Class *metaclass = new a8::reflect::Class(#classname, fieldnum, 0); \
metaclass->create =&a8::reflect::_create<classname>; \
metaclass->destroy =&a8::reflect::_destroy<classname>; \
metaclass->copy =&a8::reflect::_copy<classname>; \
classname::__metaclass = metaclass; \
assert(classname::CLSID < 1024); \
s_mfclass_metaclasses[classname::CLSID] = metaclass; \
/*classname::__metaclass = metaclass;*/ \
/*assert(classname::CLSID < 1024);*/ \
/*s_mfclass_metaclasses[0] = metaclass;*/ \
classname p;
#define END_MFMSG_CLASS() \

View File

@ -40,4 +40,8 @@ namespace a8
const int TIMER_DESTORY_EVENT = 3;
const int TIMER_USER_EVENT = 66;
namespace reflect
{
class Class;
}
};