Ogre引擎源码——String

Ogre引擎中有关String的文件如下(只列出头文件)

OgreString.h

OgreStringConverter.h

OgreStringInterface.h

OgreStringVector.h

OgreUTFString.h

 

涉及String的基础操作,只做一些简单的介绍。本文的重点会解读下StringInterface部分代码。

 

(1)OgreString.h

这个头文件中定义了一个String基础类StringUtil,其中的函数都是公共静态的。简单整理如下 

 

function namefunctional description
trim剔除字符串两侧空格和tab
split根据所给字符对字符串进行分割
tokenise可以根据给定的两个字符对字符串进行分割
toLowerCase将字符串转成小写
toUpperCase将字符串转成大写
startsWith检验字符串是否是以给定的字符串开头
endsWith检验字符串是否是以给定的字符串结尾
standardisePath将字符串转换成标准路径
splitFilename分割字符串中的路径名和文件名
splitFullFilename分割字符串中的路径名、文件名和文件后缀
splitBaseFilename分割字符串中的文件名和文件后缀
match检验字符串是否符合给定通配符
replaceAll替换字符串某部分

 

这部分中应用了大量的std::string的find、find_last_of、substr等,也用到了泛型算法replace等。这些都是书写STL的基础内容,可以通过阅读代码来温习这些内容。

 

(2)OgreStringConverter.h

这个头文件同样也是很简单的。定义了一个转换类StringConverter用来将Ogre中的基础类型与String之间进行转换。同样,所有的函数都是公共静态函数。

函数可以分为两大类,toString和parseXX。顾名思义,前者通过重载方式,将不同基础类型转换为String;后者则是通过定义不同的函数(函数名中的XX为相应的基础类型),将String转换为XX类型。

这部分的代码基本都是重复性的内容,不再赘述更多。主要的思想是通过stringstream类进行转换。

 

(3)OgreStringInterface.h

这个部分需要认真解读一下。

StringInterface类的作用是将类中的属性与String之间建立相互转换的关系。由于属性可以不一定是String类型,这个类就为设置和读取这些属性定义了统一的接口。

这个文件中包含了一下类或者枚举定义。

类(枚举)名称功能概述
ParameterType(enum)枚举所有参数的类型
ParameterDef定义一个具体参数,如名称,描述,类型等
ParamCommand转换命令抽象类,定义转换方式和获取方式
ParamDictionary维护一个类名与该类属性的转换命令
StringInterface维护所有类名的Dictionanry

 

他们之间的关系UML图如下

 StringInterface

其实这里应用了设计模式用的COMMAND模式,抽象类ParamCommand是整个过程的关键类。ParamCommand类中定义了两个接口doSet和doGet,相应的类只需要接口继承这个ParamCommand类,实现针对自己类属性的设置和读取操作。这样就完成了定制类自身的属性设置命令类。其余的List、Map等类都是对参数类型和不同类的属性命令类进行管理的数据结构。

 

在这里举个例子来说明。

例子:OgreFont.h 的 Font class

Font类定义了5个成员变量

针对这5个成员变量,分别声明一个ParamCommand的子类

以CmdType定义为例

 

注意这些变量声明为静态,是因为这些命令类为class共有的。

 

然后在第一次调用Font构造函数时向dictionary注册这些cmd

然后只要通过StringInterface的getParameter和setParameter函数就可以调用注册的cmd进行读取和设定Font类的成员变量了。

 

(4) OgreStringVector.h

这个文件中只有两句typedef,这个比较简单。

 

 

(5)OgreUTFString.h

这个头文件涉及字符编码,最近正在梳理这方面的知识,等理清后再补上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值