现在的位置: 首页 > 综合 > 正文

Symbian OS类命名规则之 – 基本类型和T类

2013年10月09日 ⁄ 综合 ⁄ 共 1768字 ⁄ 字号 评论关闭

Symbian OS类命名规则
* Symbian OS
定义了几种不同类型的类,每一种都有不同的特性,这种分类是为了描述类对象的主要属性和行为,比如哪些类对象可以建立在堆上,哪些可以建立在栈上;还有,它们怎么被释放。每一种类型的类都有一个好的定义规则,它使的对象的创建和释放变得很容易。
*
为了使分类容易被区分,Symbian OS使用了一个简单的命名规则:类名使用一个字母作为前缀(通常是TCRM)。命名规则并不总是受欢迎,但是这个规则却很容易使用,并且很有价值,因为通过它可以很容易弄清类的行为,尤其是如何释放它们。作为一个设计者,类的分类是问题简单化,你需要考虑类需要的行为,并把它们归为某类型。通过前缀标记,可以指导你该如何创建类对象,如何使用它们和如何安全释放它们。

1.1 基本类型
在这里我将讨论一下每一种类的基本特性。在讨论之前,让我们回顾一下基本数据类型,Symbian OS 提供了一个内置类型的集合(使用typedef定义),这将使它们独立于编译器,我们提倡尽量使用这些类型。
TIntX
TUintX(X=8,16,32): 8位,16位,32为整型和无符号整型;除非是进行最优化或兼容性,我们应该使用TIntUTint,它们相当于32位整型。
TInt64:
Symbian OS v8.0前的版本不支持64算法,所以TInt64通过两个32位整型来实现。在v8.0TInt64UTint64被定义成(typedef)长长整型,并得到了64位支持。
TReal32
TReal64(TReal == TReal64):单精度和双精度浮点型,跟floatdouble等同。对它们的操作要慢于整型,所以要避免在没有必要的情况下使用它们
TTextX(X=8,16):
窄字符(ANSI)和宽字符(Unicode),对应于8位和16位无符号整型。
TAny* :
等同于void*,我们可以在绝大多数情况下用TAny来替换void,除非根据上下文,void表示"nothing",比如void*参数,我们应该使用TAny*,返回void的函数没有替换必要void TypicalFunc(TAny* aPointerParameter);
TBool :
因为历史原因,TBool等同于intETrue1,EFalse0,因为在C++中把非零整型均视为true,所以应该避免直接使用ETrue进行比较每一个TBool32,当使用很多TBool时,对内存是一种浪费,你可能希望使用1位来标识一个bool值。

1.2 TClasses
T
类的行为跟C++内置类型很相似,因此他们使用typedef的第一个字符作为前缀,'T'就是Type的意思。跟内置类型相似,它们没有构造函数和析构函数,因此,T类不应该包含任何其他需要构造函数的成员。另外,T类可以包含下列成员:其他T类对象;"used a"关系的指针或引用,而不能是"has a"关系,例如TPtrC

T
类中包含所有它的成员,而不能有指向它拥有对象的指针,引用或句柄。这一切都是因为T类没有构造函数。
T
类的对象可以在栈上创建,并且在生命周期结束时可以被正确的释放。如果一个T类拥有一个析构函数,那么Symbian OS在一个leave事件中并不会调用它,因为leave没有模仿标准C++throw语法。如果为了正确释放资源而必须调用析构函数,那么该类只能在栈上实例化。
T
类可以在堆上创建对象,这样的对象需要加入到cleanup栈中以便leave时能够释放资源。在leave时,清理栈可以帮助释放内存但是不调用析构函数。
T
类经常没有定义默认构造函数;如果一个T类只有内置类型的成员,构造函数可以防止项下面这样初始化成员TMyPODClass local = { 2000, 2001, 2003 };
T
类很少有虚函数。由于T类只有内置类型的成员,所以没有必要定义拷贝函数和赋值操作符,编译器生成的就已经足够了,当然,如果你要避免克隆,需要把两者声明为私有。

一个T类有着相当复杂的API,比如TLex,用作词汇分析;描述符的基类TDesCTDes。除此之外,T类像C风格的结构体,只有public数据和方法。
枚举类型也以'T'为前缀,比如enum TMonthOfYear { EJan = 1, EFeb, ..., EDes };

抱歉!评论已关闭.