OGRE中Any 類型的實現
阿新 • • 發佈:2019-02-19
spa mco com 技術 上下文 inf strong ldr 需要
【OGRE中Any類型的實現】
OGRE中實現了一個class Any,使用Any 可以在上下文中傳遞任意類型的數據。其本質實現原理就是通過指針。
Any 只包含一個成員變量,類型為 placeholder* 的 mContent。因為每個Any實例只包含一個統一類型為 placeholder的指針成員,從而使得每個 Any 實例大小一致,都為4字節。
placeholder 是一個模板 base class,真實的數據存儲在其每一個derived class中。placeholder 類存在的意義,就是為Any提供訪問數據的統一接口。
每一種數據類型,都會有繼承於 placeholder 的各自子類。OGRE 通過提供泛型 class holder 來幫助實現這一功能。holder 類有一個成員變量, ValueType。
從上面代碼可以看到,具體的對象是存儲在 holder<ValueType>中的。她的心 ValueType 的不同,每一個 holder<ValueType> 類型的實例的占用空間是一樣的。而通過 placeholder* 基類指針則能統一訪問。
最後是 any_cast<ValueType>() 方法,該方法用於將返回 Any.mContent->held 的指針。只為 mContent 為 placeholder類型,所以使用前需要強轉為 holdre<ValueType>* 類型的指針。
OGRE中Any 類型的實現