freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

symbian系統(tǒng)開(kāi)發(fā)教程2-wenkub.com

2025-06-23 00:03 本頁(yè)面
   

【正文】 packageBuf().SampleFunction()。//編譯錯(cuò)誤!只能調(diào)用const方法packagePtrC().ConstantSampleFunction()。在這個(gè)例子中,TPckgTSample表示這是一個(gè)模板類(lèi),模板參數(shù)為T(mén)Sample,packagePtr(theSample)定義了一個(gè)對(duì)象,它持有一個(gè)指向theSample的針指。}。有兩種Package指針類(lèi):TPckg,TPckgC,它們分別對(duì)應(yīng)于可修改和不可修改的類(lèi)型,都持有一個(gè)指向被包裝對(duì)象的指針。該類(lèi)實(shí)現(xiàn)了一般目的詞法分析,和語(yǔ)法成分解析以及從字符串到數(shù)字轉(zhuǎn)換的功能。因?yàn)檫@個(gè)類(lèi)保存了一個(gè)描述符的拷貝,在拷貝中包含了要解析的文件名,拷貝會(huì)用掉寶貴的??臻g。在Symbian OS系統(tǒng)中,標(biāo)準(zhǔn)的棧空間的大小為8K字節(jié),不必要地使用有限的資源是非常浪費(fèi)的,所以盡量不要使用基于棧的TFileName 對(duì)象,也不要用值傳遞的方式使用它們,應(yīng)當(dāng)使用引用傳遞的方式。 // maxLength比9大,但不一定等于12(字的邊界) TFileName的濫用對(duì)TFileName 對(duì)象的濫用是一個(gè)潛在的危險(xiǎn)。x39。否則下面的語(yǔ)句不起作用(’?’)。TInt len = ()。_LIT(KPanic, TestPointer)。然而,TPtr需要這個(gè)最大長(zhǎng)度的信息,這時(shí)問(wèn)題來(lái)了,您從哪里得到這個(gè)最大長(zhǎng)度呢?答案在于:當(dāng)您調(diào)用Des()的時(shí)候,系統(tǒng)用HBufC的最大長(zhǎng)度來(lái)設(shè)置TPtr的最大長(zhǎng)度(iMaxLength)。 //這樣更簡(jiǎn)潔高效}另外一個(gè)比較微妙問(wèn)題是,當(dāng)您分配一個(gè)HBufC以后,然后在它上面調(diào)用Des(),可以返回一個(gè)TPtr對(duì)象。的時(shí)候,也容易范一個(gè)錯(cuò)誤,這個(gè)錯(cuò)誤同樣為代碼增加了復(fù)雜性。...// 以上代碼完全可以被下面的代替,下面代碼更有效率。這里是一個(gè)例子:void CSampleClass::UnnecessaryCodeL(const TDesCamp。如可源描述符的長(zhǎng)度超過(guò)目標(biāo)描述符的最大長(zhǎng)度,將會(huì)引發(fā)一個(gè)系統(tǒng)異常。aDes)。如果您要用其它字符填充描述符的內(nèi)容,可用Fill()方法。 SetLength()和SetMax()前者用來(lái)設(shè)置描述符的長(zhǎng)度,這個(gè)長(zhǎng)度值必須是小于描述符的最大長(zhǎng)度的,否則會(huì)引起系統(tǒng)異常。對(duì)8bit的描述符來(lái)講,它們是相等的,而對(duì)16bit的描述來(lái)說(shuō),Size() 返回的數(shù)值是 Length() 的兩倍。 Ptr()基類(lèi)TDesC 實(shí)現(xiàn)了Ptr()方法,用來(lái)訪問(wèn)描述符的數(shù)據(jù),該方法返回一個(gè)指向字符數(shù)組首地址的指針。 // Leaves are described in Chapter 2}else{(*line)。// Is the descriptor large enough (4 bytes or more) to return an// integer representing the length of data required?if (() lineLength()){if (() = sizeof(TInt)){// Writes the length required (TPckg is described later)TPckgTInt length(lineLength())。有時(shí)候,一個(gè)比較好的方法是,給調(diào)用者返回一個(gè)長(zhǎng)度值,這樣,調(diào)用者可以采用適當(dāng)?shù)牟襟E來(lái)分配一個(gè)正確長(zhǎng)度的描述符。這樣,調(diào)用者也無(wú)需再另外傳遞一個(gè)參數(shù)用來(lái)表示返回的數(shù)據(jù)長(zhǎng)度??尚薷拿枋龇淖畲箝L(zhǎng)度決定了可以從文件中讀入多少數(shù)據(jù),所以不需要再給文件服務(wù)器傳遞一個(gè)表示長(zhǎng)度的參數(shù)。IMPORT_C TInt Read(TDes8amp。為了有效率,描述符參數(shù)應(yīng)當(dāng)使用引用傳遞的方式,要么是const TDesCamp。這樣的改動(dòng)是非常不理想的,因?yàn)樗茐牧舜a的兼容性。現(xiàn)在我們來(lái)關(guān)注一下操作數(shù)據(jù)的方法和在使用描述符時(shí)一些常見(jiàn)的問(wèn)題。然而,創(chuàng)建臨時(shí)變量要求設(shè)置指針、長(zhǎng)度和描述符的類(lèi)型,這對(duì)內(nèi)聯(lián)的構(gòu)造方法來(lái)說(shuō)是一個(gè)負(fù)擔(dān),如果代碼中有很多這樣的字面量,也會(huì)使得二進(jìn)制程序的體積增大。從上面的代碼可以看到,使用_L的好處在于,您可以直接使用它,而無(wú)需在使用之前,在別的地方聲明。 // 44 bytes (contents)用_L 和 _LIT生成的字面量,它們的內(nèi)存布局是有差異的,如下圖所示:現(xiàn)在我們簡(jiǎn)單地看看 _L 和 _S 宏, 這兩個(gè)宏已經(jīng)過(guò)時(shí), 但在測(cè)試代碼中還經(jīng)常用到。 // 44 bytes// Form a stack buffer descriptor around the literal// Create a heap buffer copying the contents of the literalHBufC8* theHeapBuffer = KExampleLit8().AllocL()。 // 52 bytes (contents + 8 bytes)TBufC8(sizeof(KExampleLit8)8) theStackBuffer(KExampleLit8)。如果您用size()去獲得_LIT常量,它會(huì)返回相應(yīng)的TLitC對(duì)象的尺寸大小,這個(gè)尺寸相當(dāng)于描述符內(nèi)容的尺寸加上額外的8個(gè)byte(用來(lái)存放長(zhǎng)度值的4字節(jié)和表示結(jié)束符的NULL)。}從上面的定義中可以看到, TLitC16 (和TLitC8) 并不從TDesC8 或 TDesC16派生,但是它們與TBufC8 或TBufC16具有相同的內(nèi)存布局。()。template TInt Sinline const TDesC16* TLitC16S::operatoramp。 operator()() const。() const。因?yàn)槊枋龇膶挾葹?6bit,所以,在將C字節(jié)類(lèi)型的字符串轉(zhuǎn)換為描述符能用的數(shù)據(jù)時(shí),宏將字符串的長(zhǎng)度除以2。這個(gè)宏的用法如下:_LIT(KMyLiteralDescriptor, The quick brown fox jumps over the lazy dog)??偨Y(jié):Symbian系統(tǒng)中總共有5種類(lèi)型的描述符,TPtrC,PTtr,TBufCn,TBufn和HBufC。為了幫您簡(jiǎn)化這些操作,HBufC提供的一套R(shí)eAllocL()方法,它可以用來(lái)擴(kuò)展堆的緩存區(qū)(這個(gè)操作有可能會(huì)使緩沖區(qū)從一個(gè)內(nèi)存區(qū)域搬到另一個(gè)區(qū)域)。 // Copy and replace data in heapBuf2length = heapBuf2Length()。 // length = 17HBufC* heapBuf2 = ()。TInt length = heapBufLength()。對(duì)該類(lèi)的操作幾乎和TBufCn一樣:該類(lèi)提供了一套賦值操作,允許整個(gè)緩沖區(qū)中的內(nèi)容被替換掉;同樣,新內(nèi)容的長(zhǎng)度不能超過(guò)緩存區(qū)的大小,否則會(huì)引起系統(tǒng)異常;通過(guò)調(diào)用Des()方法,可以返回一個(gè)可修改的指針描述符(TPtr),可以通過(guò)這個(gè)指針描述符來(lái)更改緩沖區(qū)中的內(nèi)容。 HBufC也許您已經(jīng)發(fā)現(xiàn),HBufC的類(lèi)名以“H”開(kāi)頭,這不符合Symbian系統(tǒng)中慣用的命名習(xí)慣。 // updated from C string 基于堆的(HeapBased)緩沖區(qū)描述符當(dāng)您要使用非常長(zhǎng)的字符串時(shí),有另外一種選擇:基于堆的描述符。 // Constructed from constant buffer descriptorTBuf840 buf3((TText8*)Do Geese see God?)。不過(guò),您應(yīng)當(dāng)記住,使用動(dòng)態(tài)數(shù)組的額外開(kāi)銷(xiāo)是很高的。假如緩沖區(qū)的內(nèi)容需要擴(kuò)展,那么您必須決定是在編譯的時(shí)候就給定一個(gè)足夠大的值,或是在運(yùn)行的時(shí)候動(dòng)態(tài)分配內(nèi)存。 TBufn這也是一個(gè)模板類(lèi),它是一個(gè)可修改的緩沖區(qū)描述符類(lèi),后面的n表示緩沖區(qū)大小。ASSERT(()==())。_LIT8(KPalindrome, Satan, oscillate my metallic sonatas)。 // Panic! Max length of buf3 is insufficient for buf2 data該描述符中的數(shù)據(jù)可以被整體置換,但不能被直接修改,但有時(shí)候我們的確需要修改緩存區(qū)中的數(shù)據(jù),該怎么辦呢?系統(tǒng)提供了另一種途徑來(lái)修改數(shù)據(jù)。TBufC50 buf4。_LIT(KPalindrome, Satan, oscillate my metallic sonatas)。該類(lèi)從TBufCBase類(lèi)派生,尖括號(hào)內(nèi)的數(shù)字表示分配給該描述符的數(shù)據(jù)區(qū)的大小。下圖給出了描述符的內(nèi)存布局:iLength 12iMaxLengthHello World!TBuf15iLength 12Hello World!TBufC12這兩種描述符通常用來(lái)存儲(chǔ)定長(zhǎng)的或相對(duì)較小的字符串,常用來(lái)存放長(zhǎng)度小于256個(gè)字符的文件名。 // Attempt to update memPtr which panics because the// contents of ptr2 (43 bytes) exceeds max length of memPtr (40 bytes)您一定不要混淆了Set()方法和=()賦值操作。TBufC100 buf2(KLiteralDes2)。 // Valid pointer into memory...TInt maxLen = 40。_LIT(KLiteralDes1, Jackdaws love my big sphinx of quartz)。 // length = 0, max length = 32TPtr8 memPtr2(memoryLocation, len, maxLen)。 // Maximum length = 60, as for bufTUint8* memoryLocation。 // TBufC are described laterTPtr ptr(())。這個(gè)類(lèi)定義了一些構(gòu)造方法,使得它能從指向內(nèi)存的指針構(gòu)造,并設(shè)置適當(dāng)?shù)拈L(zhǎng)度值和最大長(zhǎng)度值。 // Points to the data in beta, KLiteralDes1(alpha)。TPtrC beta(KLiteralDes2)。如果您想指明,不能改變您的TPtrC所指向的數(shù)據(jù),那么您可以將TPtrC聲明為const,這樣,當(dāng)您試圖用Set()方法更改TPtrC所指向的數(shù)據(jù)時(shí),編譯器會(huì)產(chǎn)生警告。 // Pointer into memory initialized elsewhereTInt length。 // 常量緩存區(qū)描述符,后面介紹TPtrC ptr(constBuffer)。// 字面量描述符將在后面介紹_LIT(KLiteralDes, Sixty zippers were quickly picked from the wovenjute bag)。 TPtrCTPtrC相當(dāng)于C語(yǔ)言中的const char*。所以,如果要該描述符是在堆上分配的,那么應(yīng)通過(guò)堆描述符(HBufC,下面將要講解)來(lái)操作內(nèi)存的分配和銷(xiāo)毀;如果指針描述符所指向的字符串是在棧上分配的,那這個(gè)內(nèi)存必須是已經(jīng)在棧上分配好的。它有一個(gè)能返回最大的內(nèi)存容量的方法和一系列的用來(lái)修改字符串?dāng)?shù)據(jù)的方法。描述符有兩種基本的內(nèi)存布局:指針描述符和緩存區(qū)描述符。現(xiàn)在我們來(lái)看看描述符的派生類(lèi),您可以實(shí)例化和使用派生類(lèi)的對(duì)象。這些方法使用了斷言(assertion)來(lái)確保描述符的最大長(zhǎng)度不會(huì)被超出。所有的這些方法都被派生類(lèi)繼承,派生類(lèi)只實(shí)現(xiàn)一些特定的構(gòu)造方法和復(fù)制賦值的方法。TDes有一個(gè)額外的成員變量用來(lái)存放為該描述符分配數(shù)據(jù)的最大長(zhǎng)度。子類(lèi)可以通過(guò)調(diào)用基類(lèi)TDesC的Ptr()方法來(lái)訪問(wèn)描述符的數(shù)據(jù),Ptr()方法檢查這4個(gè)bit,確定描述符的類(lèi)型并返回它的數(shù)據(jù)在內(nèi)存中的地址。 不用虛函數(shù)重寫(xiě)的原因是因?yàn)?,虛函?shù)會(huì)給每個(gè)被派生的描述符對(duì)象增加4節(jié)字的額外負(fù)擔(dān),c++用這4個(gè)字節(jié)來(lái)存放指向虛函數(shù)表的指針。這個(gè)類(lèi)提供了一些用來(lái)返回字符串的長(zhǎng)度和操作數(shù)據(jù)的
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1