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 类型的实现的更多相关文章

  1. Axiom3D:Ogre中Mesh网格分解成点线面。

    这个需求可能比较古怪,一般Mesh我们组装好顶点,索引数据后,直接放入索引缓冲渲染就好了.但是如果有些特殊需要,如需要标注出Mesh的顶点,线,面这些信息,以及特殊显示这些信息. 最开始我想的是自己分 ...

  2. 详解Java 8中Stream类型的“懒”加载

    在进入正题之前,我们需要先引入Java 8中Stream类型的两个很重要的操作: 中间和终结操作(Intermediate and Terminal Operation) Stream类型有两种类型的 ...

  3. SQL 中不同类型的表连接

    http://www.linuxidc.com/Linux/2012-08/68035.htm 1.简介 在关系型数据库中,join操作是将不同的表中的数据联合在一起时非常通用的一种做法.首先让我们看 ...

  4. Object-C中动态类型对象相关操作汇总

    Object-C(以后简称OC)中有id类型,相对于明确定义类型的静态类型,称为动态类型. 使用动态类型,配合多态(不同类型拥有同名方法),动态绑定(运行时决定实际调用的方法)可以将很多判断延迟到运行 ...

  5. MYSQL中 ENUM 类型

    MYSQL中 ENUM 类型的详细解释 ENUM类型 ENUM 是一个字符串对象,其值通常选自一个允许值列表中,该列表在表创建时的列规格说明中被明确地列举. 在下列某些情况下,值也可以是空串(&quo ...

  6. 第66课 C++中的类型识别

    1. 类型识别 (1)在面向对象中可能出现下面的情况 ①基类指针指向子类对象 ②基类引用成为子类对象的别名 ▲静态类型——变量(对象)自身的类型(定义变量类型时类型或参数类型) ▲动态类型——指针(引 ...

  7. 【翻译自nikic大神】PHP中原生类型的方法

    引言 第一次,翻译别人的文章,用四级英语的水平来翻译~~囧,可能有很多不太恰当的地方,尽管拍砖(有些地方实在想不到恰当的翻译,我同时贴出了原文和自己很low的翻译). 翻译这篇文章用了我3个晚上一个中 ...

  8. SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int

    --SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int --关键说明:--1.从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段- ...

  9. NET中的类型和装箱/拆箱原理

    谈到装箱拆箱,DebugLZQ相信给位园子里的博友一定可以娓娓道来,大概的意思就是值类型和引用类型的相互转换呗---值类型到引用类型叫装箱,反之则叫拆箱.这当然没有问题,可是你只知道这么多,那么Deb ...

随机推荐

  1. 程序员装X指南

      一.准备工作“工欲善其事必先利其器.” 1.电脑不一定要配置高,但是双屏是必须的,越大越好,能一个横屏一个竖屏更好.一个用来查资料,一个用来写代码 .总之要显得信息量很大,效率很高. 2.椅子不一 ...

  2. Kettle解决方案: 第一章ETL入门

    第一章ETL入门 1.1 OLPT和数据仓库对比 普通的事务系统和商业智能系统(BI)有什么区别? 1个独立的普通事务系统也被称为在线事务处理系统(OLTP) 商业智能系统也常被称为决策支持系统(DS ...

  3. verilog 中task用法

    1.任务定义  任务定义的形式如下:  task task_id;      [declaration]      procedural_statement  endtask  其中,关键词 task ...

  4. list 转成 tree

    package com.zl; import java.util.ArrayList; import java.util.List; public class MenuItem { private S ...

  5. springmvc读取服务器磁盘图片,显示于前台页面

    在项目中的config目录下有一个文件,在后台程序中获取 它并使用. springmvc提供一个方法:File file = new ClassPathResource("NonTaxVou ...

  6. Ehcache3.4 XML配置硬盘存储

    最近开始学习使用Ehcache, 3.4的文档实在过于简单,尤其是对于XML配置,例子太少.相对于硬编码,我更偏爱灵活的XML配置,为了实现xml配置,摸索了两天,终于运行成功. ehcache.xm ...

  7. Linux常用命令 笔记

     Linux常用命令  笔记 一.文件处理命令 1. ls命令:显示目录文件                          -a 显示所有文件,包括隐藏文件.(all)               ...

  8. selenium测瀑布流UI页面的Python代码

    from  selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdri ...

  9. Python课程第三天作业

    一.统计⽂件数据中出现的的所有字符与该字符出现的个数(不区分⼤⼩写,标点与空格也算) ⽂件内容: hello friend, can you speak English! # 结果: { 'h': 1 ...

  10. 前三次OO作业小结

    I used to be enamored of object-oriented programming. I'm now finding myself leaning toward believin ...