構建運行時 c++ Class 唯一標識的方法

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 是運行時得到的。

有了這些唯一性的標誌,就可以爲某些高效的查找或共享等機制提供依據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章