如何从 C++ 过渡到 SYMBIAN C++?
2010-03-01 17:41:00 来源:WEB开发网TViewYPosQualifier yPosQualifier;
yPosQualifier.SetHotSpot(TViewYPosQualifier::EFViewBottomOfLine);
yPosQualifier.SetMakeLineFullyVisible(
TViewYPosQualifier::EFViewForceLineFullyVisible);
iDisplay->TextView()->SetViewL(
iDisplay->TextLength(),
yPos,
yPosQualifier,
CTextView::EFViewDiscardAllFormat);
谁会想得到呢?我们的一位同事就是不相信这是就此可行的惟一途径,但是他通过利用许多(各种各样的)存在于各个类之中的各种API,试用了各种不同的方法来证明了这一点。
我们正在描述的这种复杂性其实是因为Symbian操作系统提供的功能实在太丰富了,理解这一点很重要。一旦你了解了这个领域,你就会对Symbian操作系统的对象结构是如此明智感激不尽,然后很快你就会发现你能够预知你需要的函数藏在什么地方。如此重复,你会发现我们刚开始的困惑现在已经变成了一种审美享受。
4.串
Symbian中的串!毫无疑问Symbian中对串的实现是经过深思熟虑的,强壮的和经济的。同样无疑的是这代表着一种富贵病。串是通过Symbian称之为“描述符”的机制来实现的,跟以下几个类有关:TDesC、TBufCBase、TDes、TPtrC、TBufC、HBufC、TBuf和TPtr。这还不包括由TLitC操纵的直接量,它严格来说还算不上是个描述符。我至今也还没有提到Unicode,虽然它显然很受注意。这些类可以使你精确的使用最少量的内存来存储不同类型的串,同时还允许它们“干净”的互相操作。但是每次都要考虑到底使用哪一个实在不是一件有趣的事情,这种情况是无法避免的,因为不同的API有不同的参数或返回值。
这里有个小例子把一个名字转化为样本消息:
CODE:
_LIT(KBoilerplate, "Hello there, %S");
TPtrC name = GetPointerIntoNameDes criptorWithoutAllocatingAnyMemory();
TPtr finishedProduct = HBufC::NewLC(KBoilerplate().Length() + name.Length())->Des();
finishedProduct.Format(KBoilerplate(), &name);
// 这段代码还缺少了一行,在下文会添加并讨论。
根本没有哪个类提供类似于MFC串或是Java串——完全动态的串。Java中对于String和StringBuffer的划分对我们在此讨论的问题几乎没有任何价值。Symbian所做的值得赞扬的事就是他们把这些的文档做得很好。但是你真正需要的文档却不会频繁去读它。Symbian在开发时考虑的是那些资源有限的机器,不可否认对于某些应用方面和平台来说这是必不可少的。但是就目前来说,一个Symbian操作系统的C++程序员会感觉像那些早期的IBM PC程序员,他们在对付的是Intel的分段结构,然而68000芯片又大又单一的寻址空间使得苹果看起来是个更酷的选择。
5.清洁栈及错误处理
Symbian操作系统的错误处理框架,主要是清洁栈,是个Windows程序员不太熟悉的元素。就像描述符一样,它很优雅,Symbian宣布它比C++语言的异常处理机制有效得多。
更多精彩
赞助商链接