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 是运行时得到的。
有了这些唯一性的标志,就可以为某些高效的查找或共享等机制提供依据。