Symbian c++中的数据类型

来源:互联网 发布:淘宝店取名字大全 编辑:程序博客网 时间:2024/05/22 10:39

 Symbian中,很多C++基本类型都被重新定义了,最好使用Symbian的,理由如下:

·             所有Symbian API都是用的Symbianc重定义的

·             将来Symbian OS32位转为64位时,支持性更好

·             这本身就是Symbian C++ Coding Standards所要求的

 Integers

    typedef signed int TInt;  C++中的signed int32位,基本用法类似。

    typedef unsigned int TUint;  一般用于计数器(Counter)或者标记(Flags)

其他Int类型:TInt64 TInt32 TInt16TInt8 同时有一份TUint版本

Text

 text类型在Symbian编程中基本不用,而一般采用描述符(descriptor)。TText默认是16位的。

Boolean 

    typedef int TBool;有两个枚举值:ETrueEFalseTBool变量最好不要直接和ETureEFalse比较。如下

TBool flag = ETrue;
if (flag)  // if (!flag)

    flag = EFalse; 
}

 Floating Point

    对浮点数的支持视处理器而定如果没有FPU效率非常低所以最好是不要用浮点数。如果一定要用,尽量转化为整数操作

typedef float TReal32;  typedef double TReal64; typedef double TReal;

TAny

    typedef void TAny;

TAny一般只用作指针,其他情况下用void比较好。

TAny* MyFunction();     void MyOtherFn();

TAny* 在很多Symbian API中都用到了,如:

static TUint8* Copy( TAny* aTrg, const TAny* aSrc, TInt aLength);

Enumerations

enum TState {EOff, Eon, EInit};

Enumeration类型应该以T开头,而枚举值应该以E开头。

TState  state = GetState();
if (state == EOn)
{
   //Do something here

Coding Conventions

    T类:只包含值,而不包含指针以及外部的资源,在栈上分配空间

TVersion osVersion = User::Version();

    C类:所有需要分配内存的类都必须从CBase继承并且以C开头。

class CExample : public CBase
{
private:
   CDesCArrayFlat* iArray;
}    

CExample* example = new (ELeave) CExample;

    R类:包含指向某个资源的handler

RTimer timer;
timer.CreateLocal();

    M类:定义一个接口,一般只包含纯虚函数,不包含成员数据,减少类之间的依赖,用来接受回调消息。

class MEikStatusPaneObserver
{
   public:
        virtual void HandleStatusPaneSizeChange() = 0;
}

任何实现MEikStatusPaneObserver接口的类都必须实现HandleStatusPaneSizeChange()函数。

Variable Naming Conventions

·                 成员变量以“i”开头

·                 参数以“a”开头

·                 动态变量随便,以小写字母开头

·                 常量以“K”开头

·                 尽量不要使用全局变量,不能使用全局静态变量。

Functions

·                 函数以大写字母开头,如AddFileNameL();

·                 D结尾表示deletion of an object

·                 L结尾表示函数可能leave

·                 C结尾表示一个item被放到cleanup stack

Casting

    Casting用于在类(classes)和类型(types)之间作转化,Symbian中仍然可以使用C中语法。

    dynamic_cast:不支持,Symbian中没有RTTI

    static_cast:把一个基类转化为一个继承类。 

TInt intValue = 0xff;
TUint8 byteValue = static_cast<TUint8>(intValue);

    reinterpret_cast:把一个指针类型转化为另外一个指针类型,如integer转化为point类型或者相反。

TUint32 fourBytes = 0;
TUint8* bytePtr = reinterpret_cast<TUint8*> (&fourBytes);
bytePtr++;
*bytePtr = 0xFF; 

    const_cast:移除一个类的const属性。

 

原创粉丝点击