OGRE中Any 類型的實現

OGRE中Any類型的實現spa

  OGRE中實現了一個class Any,使用Any 能夠在上下文中傳遞任意類型的數據。其本質實現原理就是經過指針。指針

  Any 只包含一個成員變量,類型爲 placeholder* 的 mContent。由於每一個Any實例只包含一個統一類型爲 placeholder的指針成員,從而使得每一個 Any 實例大小一致,都爲4字節。對象

  

  placeholder 是一個模板 base class,真實的數據存儲在其每個derived class中。placeholder 類存在的意義,就是爲Any提供訪問數據的統一接口。blog

  

  每一種數據類型,都會有繼承於 placeholder 的各自子類。OGRE 經過提供泛型 class holder 來幫助實現這一功能。holder 類有一個成員變量, ValueType。繼承

  

  從上面代碼能夠看到,具體的對象是存儲在 holder<ValueType>中的。她的心 ValueType 的不一樣,每個 holder<ValueType> 類型的實例的佔用空間是同樣的。而經過 placeholder* 基類指針則能統一訪問。接口

  最後是 any_cast<ValueType>() 方法,該方法用於將返回 Any.mContent->held 的指針。只爲 mContent 爲 placeholder類型,因此使用前須要強轉爲 holdre<ValueType>* 類型的指針。ast

  

相關文章
相關標籤/搜索