首页 > 其他 > 详细

OGRE中Any 类型的实现

时间:2019-02-19 00:56:49      阅读:435      评论:0      收藏:0      [点我收藏+]

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 类型的实现

原文:https://www.cnblogs.com/tekkaman/p/10398882.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!