【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