From 881a656f348b7c21707cb06ae7a06c2446d1f9ef Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 19 Nov 2024 02:06:33 +0800 Subject: [PATCH] added TypeEqual() --- datatype/typeinfo/ObjectRelationTest.cpp | 28 ++++++++++++++++-------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/datatype/typeinfo/ObjectRelationTest.cpp b/datatype/typeinfo/ObjectRelationTest.cpp index df11d99..5a953e2 100644 --- a/datatype/typeinfo/ObjectRelationTest.cpp +++ b/datatype/typeinfo/ObjectRelationTest.cpp @@ -21,16 +21,13 @@ using namespace hgl; using namespace std; -#define CLASS_TYPE_HASH(type) public: static const size_t StaticTypeHash(){return typeid(type).hash_code();} - +#define CLASS_TYPE_HASH(type) static const size_t StaticTypeHash(){return typeid(type).hash_code();} class BaseObject { size_t object_hash_code; size_t object_serial; - CLASS_TYPE_HASH(BaseObject) - public: BaseObject(const size_t hash,const size_t os) @@ -40,21 +37,30 @@ public: } virtual ~BaseObject()=default; - + + CLASS_TYPE_HASH(BaseObject) + const size_t GetTypeHash()const{return object_hash_code;} const size_t GetObjectSerial()const{return object_serial;} };//class BaseObject -#define CLASS_BODY(class_type) CLASS_TYPE_HASH(class_type) \ - private: \ +#define CLASS_BODY(class_type) private: \ static const size_t CreateObjectSerial(){static size_t serial=0;return ++serial;} \ public: \ class_type():BaseObject(class_type::StaticTypeHash(),class_type::CreateObjectSerial()){} \ - virtual ~class_type()=default; + virtual ~class_type()=default; \ + CLASS_TYPE_HASH(class_type) template inline const bool IsType(BaseObject *bo){return bo?(bo->GetTypeHash()==T::StaticTypeHash()):false;} +inline const bool TypeEqual(BaseObject *bo1,BaseObject *bo2) +{ + if(!bo1||!bo2)return(false); + + return bo1->GetTypeHash()==bo2->GetTypeHash(); +} + class TestObject:public BaseObject { CLASS_BODY(TestObject) @@ -145,9 +151,13 @@ int main(int,char **) std::cout<<"bo->TypeHash: "<GetTypeHash()<Serial: "<GetObjectSerial()<(bo); + bool result=IsType(bo); std::cout<<"IsType(bo) result is "<<(result?"true":"false")<