1.使用class 的 static 類變量, c++示例代碼如下:
//.h
class BaseClass {
public:
static unsigned TypeId() { return s_typeId; }
protected:
static unsigned s_typeCounter;
static unsigned s_typeId;
}
class SubClass : public BaseClass {
public:
static unsigned TypeId() { return s_typeId; }
private:
static unsigned s_typeId;
}
// .cc
int BaseClass::s_typeCounter{ 0 };
int BaseClass::s_typeId{ s_typeCounter++ };
int SubClass::s_typeId{ s_typeCounter++ };
以上代碼中 BaseClass::TypeId() 得到的值爲0, SubClass::TypeId() 得到的值爲1。這樣就能快速的標識不同位於派生情況下的各種相關類
2.使用c++ RTTI(Run Time Type Identification)機制,通過 reinterpret_cast 和 typeid來獲取唯一標識, 示例代碼如下:
#include <typeinfo>
//
//
ShaderCodeParser scpX;
std::string ns = typeid(scpX).name();
int class_id = reinterpret_cast<int>(typeid(scpX).name());
trace("ns: ", ns,",class_id: ", class_id);
上述代碼中的 class_id 是運行時得到的。
有了這些唯一性的標誌,就可以爲某些高效的查找或共享等機制提供依據。