added TypeEqual()
This commit is contained in:
parent
84a11a6032
commit
881a656f34
@ -21,16 +21,13 @@
|
|||||||
using namespace hgl;
|
using namespace hgl;
|
||||||
using namespace std;
|
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
|
class BaseObject
|
||||||
{
|
{
|
||||||
size_t object_hash_code;
|
size_t object_hash_code;
|
||||||
size_t object_serial;
|
size_t object_serial;
|
||||||
|
|
||||||
CLASS_TYPE_HASH(BaseObject)
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
BaseObject(const size_t hash,const size_t os)
|
BaseObject(const size_t hash,const size_t os)
|
||||||
@ -40,21 +37,30 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual ~BaseObject()=default;
|
virtual ~BaseObject()=default;
|
||||||
|
|
||||||
|
CLASS_TYPE_HASH(BaseObject)
|
||||||
|
|
||||||
const size_t GetTypeHash()const{return object_hash_code;}
|
const size_t GetTypeHash()const{return object_hash_code;}
|
||||||
const size_t GetObjectSerial()const{return object_serial;}
|
const size_t GetObjectSerial()const{return object_serial;}
|
||||||
};//class BaseObject
|
};//class BaseObject
|
||||||
|
|
||||||
#define CLASS_BODY(class_type) CLASS_TYPE_HASH(class_type) \
|
#define CLASS_BODY(class_type) private: \
|
||||||
private: \
|
|
||||||
static const size_t CreateObjectSerial(){static size_t serial=0;return ++serial;} \
|
static const size_t CreateObjectSerial(){static size_t serial=0;return ++serial;} \
|
||||||
public: \
|
public: \
|
||||||
class_type():BaseObject(class_type::StaticTypeHash(),class_type::CreateObjectSerial()){} \
|
class_type():BaseObject(class_type::StaticTypeHash(),class_type::CreateObjectSerial()){} \
|
||||||
virtual ~class_type()=default;
|
virtual ~class_type()=default; \
|
||||||
|
CLASS_TYPE_HASH(class_type)
|
||||||
|
|
||||||
|
|
||||||
template<typename T> inline const bool IsType(BaseObject *bo){return bo?(bo->GetTypeHash()==T::StaticTypeHash()):false;}
|
template<typename T> 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 TestObject:public BaseObject
|
||||||
{
|
{
|
||||||
CLASS_BODY(TestObject)
|
CLASS_BODY(TestObject)
|
||||||
@ -145,9 +151,13 @@ int main(int,char **)
|
|||||||
std::cout<<"bo->TypeHash: "<<bo->GetTypeHash()<<std::endl;
|
std::cout<<"bo->TypeHash: "<<bo->GetTypeHash()<<std::endl;
|
||||||
std::cout<<"bo->Serial: "<<bo->GetObjectSerial()<<std::endl;
|
std::cout<<"bo->Serial: "<<bo->GetObjectSerial()<<std::endl;
|
||||||
|
|
||||||
const bool result=IsType<TestObject>(bo);
|
bool result=IsType<TestObject>(bo);
|
||||||
|
|
||||||
std::cout<<"IsType<TestObject>(bo) result is "<<(result?"true":"false")<<std::endl;
|
std::cout<<"IsType<TestObject>(bo) result is "<<(result?"true":"false")<<std::endl;
|
||||||
|
|
||||||
|
result=TypeEqual(&to1,bo);
|
||||||
|
|
||||||
|
std::cout<<"TypeEqual(&to1,bo) result is "<<(result?"true":"false")<<std::endl;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user