您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“c++中不同字段的方法是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
字段內(nèi)容的定義
修飾符
字段類型
引用方式
不同字段的方法
1)optional修飾的基本類型:
2)optional修飾的對象類型:
3)repeated修飾的基本類型:
4)repeated修飾的對象類型:
序列化
反序列化
//文件名:addressbook.proto syntax = "proto2";//proto版本 //.proto文件新增一個可選的package聲明符,用來防止不同的消息類型有命名沖突。 //包的聲明符會根據(jù)使用語言的不同影響生成的代碼。對于C++,產(chǎn)生的類會被包裝在C++的命名空間中。 package tutorial;package聲明符 message Person { required string name = 1;//姓名,= 1 二進(jìn)制編碼中使用的唯一 “標(biāo)記” required int32 id = 2;//ID optional string email = 3;//email enum PhoneType {//枚舉消息類型 MOBILE = 0;//proto3版本中,首成員必須為0,成員不應(yīng)有相同的值 HOME = 1; WORK = 2; } // message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phones = 4;//phones為數(shù)組 } message AddressBook { repeated Person people = 1; }
required 必須提供該字段的值,否則消息會被認(rèn)為是”未初始化的“
optional
表示屬性值為可選項(xiàng),不指定使用默認(rèn)值。int和char數(shù)據(jù)類型默認(rèn)為0,string默認(rèn)為空,bool默認(rèn)為false,嵌套message默認(rèn)為構(gòu)造,枚舉為第一個
repeated 表示該屬性為重復(fù)字段,可看走是動態(tài)數(shù)組,類似于c++中的vector
如果為optional屬性,發(fā)送端沒有包含該屬性,則接收端在解析式采用默認(rèn)值。對于默認(rèn)值,如果已設(shè)置默認(rèn)值,則采用默認(rèn)值,如果未設(shè)置,則類型特定的默認(rèn)值為使用,例如string的默認(rèn)值為”“。
package
相當(dāng)于namespace
message
相當(dāng)于clas
name
相當(dāng)于屬性值
類成員函數(shù)變量
package::message.方法()
標(biāo)準(zhǔn)meaasge方法
1.bool IsInitialized() const;: 檢查是否已設(shè)置所有必填 required 字段
2.string DebugString() const;: 返回 message 的人類可讀表達(dá),對調(diào)試特別有用
3.void CopyFrom(const Person& from);用給定的 message 的值覆蓋 message
4.void Clear();: 將所有元素清除回 empty 狀態(tài)
set_屬性名(val) :初始化修改屬性值;
屬性名():獲取屬性值,只讀模式,返回類型是::google::protobuf::int64;
屬性名():返回只讀的屬性類型對象的引用,屬性類型是指pb中定義的對象;
mutable_屬性名():返回可修改的屬性類型對象的指針,屬性類型是指pb中定義的對象;
set_屬性名():初始化設(shè)置字段值
add_屬性名(val):向?qū)傩约现刑砑釉兀?/p>
屬性名_size():獲取集合大??;
屬性名(i):返回集合中某一個元素,返回類型::google::protobuf::int64;
屬性名():返回只讀的整個集合的引用,返回的集合類型是const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >&,可以使用iterator來迭代遍歷,可用于修改;
mutable_屬性():返回可修改的整個集合的指針,返回的集合類型::google::protobuf::RepeatedField< ::google::protobuf::int64 >*,可以使用iterator來迭代遍歷,可用于修改;
set_屬性名(int,x):設(shè)置repeated中元素的值
add_屬性名():返回可修改的屬性類型對象的指針(集合中的一個元素),屬性類型是指pb中定義的對象;
屬性名_size():獲取集合大小;
屬性名(i):返回集合中某一個元素,返回的是只讀的屬性類型對象的引用,屬性類型是指pb中定義的對象;
mutable_屬性名(i):返回集合中某一個元素,返回的是可修改的屬性類型對象的指針,屬性類型是指pb中定義的對象;
屬性名():返回只讀的整個集合的引用,集合類型是const ::google::protobuf::RepeatedPtrField< pb定義的對象>& XXX const;,可以使用iterator來迭代遍歷;
mutable_屬性名():返回可修改的整個集合的指針,集合類型是::google::protobuf::RepeatedPtrField< pb定義的對象>*,可以使用iterator來迭代遍歷;
required字段需要初始化,可以通過IsInitialized來檢查是否完成message對象的初始化
SerializedAsString(),SerializedToString(std::string* output) 把meaage編碼進(jìn)output
SerializedToArray(void*,int)把message編碼進(jìn)數(shù)組buff
SerializedToOstream(ostream*)把message編碼到輸出流
ByteSize()獲取二進(jìn)制字節(jié)序的大小,可用于初始化存放容器
ParseFromString(std::string& data) 把data解碼到message
ParseFromArray(char* buf,int size)把buf解碼到message,效率比第一個快很多
ParseFromIstream(istream*)從istream輸入流解碼到message
has_xxx()用于檢查相應(yīng)字段是否存在數(shù)據(jù)
xxx_size()用于確定repeated字段是否存在,0表示未序列化
“c++中不同字段的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。