为了便于class类型的识别,Symbian OS使用了一个简单的命名约定,即在class名称前加入前缀字母(通常为T、C、R或M)。虽然命名约定并不总是受到青睐,但是Symbian OS中这个命名约定非常容易理解,而且作用也很明显,它可以更便于你对class的行为,特别是对清除方式进行识别。对于一个class设计者而言,class 分类简化了问题复杂性。可以在Symbian OS中依据class的功能需求选择一个与之相对应的内置基本类型。选择合适的类型之后,就可以集中精力处理class的职能。同时,在使用一个并不熟知的class时,命名约定可以指点你如何进行一个对象的实例化,以及在确保发生意外情况时的安全的前提下使用,销毁对象的方式。
1.1 基本类型
本章我们将对每个class类型的主要特征进行阐述,不过,在开始之前让我们先回过头来了解一下基本类型的基础知识。Symbian OS采用typedefs的形式定义一系列内建类型,从而保证这些类型独立于编译器。在Symbian OS编程中应该使用它们来取代ANSI C++中的原始类型(native type)。
TIntX和TUintX(X可以为8,16,32)分别表示8位、 16位和32位有符号或无符号整数。如果没有特殊原因,比如应用程序的尺寸优化或兼容性方面的问题,否则在一般情况下应该使用可以在所有32位整型中通用的非特定(non-specific)的TInt或TUint类型。
TInt64 Symbian OS在8.0以前不提供对64位算术ARM的支持,因此TInt64是通过两个32位值来实现的。从Symbian 8.0起,TInt64和TUInt64将开始直接提供对64位的支持。
TReal32 和TReal64(TReal等价于TReal64)为单精度和双精度浮点数提供支持,分别等价于float和double [1] 。Symbian OS中的浮点数计算要大大慢于整数,所以在不必要的情况下应尽量避免使用浮点数。
TTextX (X可以为8,16),窄字符串,分别相当于8位和16位无符号整数。
通过 typedef’d ”类型的定义,TAny*被有效替换成指向任意类型的指针,所以TAny*可以用在Void*的场合。TAny因而等价于void,但在Symbian OS中void仍然意为“空”,所以不要想当然的用TAny来替换原始类型void。因此,在Symbian OS中一个获取void*指针(指向任意对象)且返回类型为void(空)的函数的典型格式如下:
void TypicalFunction(TAny* aPointerParameter);
这是Symbian OS typedef替换原始类型的一个例外,因为void在表达“空”的含义时具有较好的编译器独立性
TBool bool类型,因为一些历史原因TBool和int是等价的,相应的ETrue(=1),EFalse(=0)。记住,C++会把任何非零值视为true。基于这一原因,应避免TBool类型和ETrue直接进行比较。
每一个TBool需要32位,对于一个bool值而言这是一个十分浪费的内存开销。因此,可以考虑使用位元组合(bitfields)来代替TBool来存储类中大量的bool数据。而TBool类型的32位可以用位元组合的形式保存32个bool值。当然这也意味着代码复杂性的提高,因而也就需要在提高代码复杂性和使用位元组合之间作一个权衡。
【编辑推荐】