1. 程式人生 > >OGRE中Any 類型的實現

OGRE中Any 類型的實現

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 類型的實現