91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c++中不同字段的方法是什么

發布時間:2021-08-24 17:33:28 來源:億速云 閱讀:198 作者:chen 欄目:開發技術

本篇內容介紹了“c++中不同字段的方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

目錄
  • 字段內容的定義

    • 修飾符

    • 字段類型

    • 引用方式

  • 不同字段的方法

    • 1)optional修飾的基本類型:

    • 2)optional修飾的對象類型:

    • 3)repeated修飾的基本類型:

    • 4)repeated修飾的對象類型:

    • 序列化

    • 反序列化


字段內容的定義

//文件名:addressbook.proto
syntax = "proto2";//proto版本
//.proto文件新增一個可選的package聲明符,用來防止不同的消息類型有命名沖突。
//包的聲明符會根據使用語言的不同影響生成的代碼。對于C++,產生的類會被包裝在C++的命名空間中。
package tutorial;package聲明符
message Person {
  required string name = 1;//姓名,= 1 二進制編碼中使用的唯一 “標記”
  required int32 id = 2;//ID
  optional string email = 3;//email
  enum PhoneType {//枚舉消息類型
    MOBILE = 0;//proto3版本中,首成員必須為0,成員不應有相同的值
    HOME = 1;
    WORK = 2;
  }
//
  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }
  repeated PhoneNumber phones = 4;//phones為數組
}
message AddressBook {
  repeated Person people = 1;
}

修飾符

  • required 必須提供該字段的值,否則消息會被認為是”未初始化的“

  • optional

表示屬性值為可選項,不指定使用默認值。int和char數據類型默認為0,string默認為空,bool默認為false,嵌套message默認為構造,枚舉為第一個

  • repeated 表示該屬性為重復字段,可看走是動態數組,類似于c++中的vector

如果為optional屬性,發送端沒有包含該屬性,則接收端在解析式采用默認值。對于默認值,如果已設置默認值,則采用默認值,如果未設置,則類型特定的默認值為使用,例如string的默認值為”“。

字段類型

  • package

相當于namespace

  • message

相當于clas

  • name

相當于屬性值

引用方式

  • 類成員函數變量

package::message.方法()

  • 標準meaasge方法

1.bool IsInitialized() const;: 檢查是否已設置所有必填 required 字段

2.string DebugString() const;: 返回 message 的人類可讀表達,對調試特別有用

3.void CopyFrom(const Person& from);用給定的 message 的值覆蓋 message

4.void Clear();: 將所有元素清除回 empty 狀態

不同字段的方法

1)optional修飾的基本類型:

  • set_屬性名(val) :初始化修改屬性值;

  • 屬性名():獲取屬性值,只讀模式,返回類型是::google::protobuf::int64;

2)optional修飾的對象類型:

  • 屬性名():返回只讀的屬性類型對象的引用,屬性類型是指pb中定義的對象;

  • mutable_屬性名():返回可修改的屬性類型對象的指針,屬性類型是指pb中定義的對象;

  • set_屬性名():初始化設置字段值

3)repeated修飾的基本類型:

  • add_屬性名(val):向屬性集合中添加元素;

  • 屬性名_size():獲取集合大小;

  • 屬性名(i):返回集合中某一個元素,返回類型::google::protobuf::int64;

  • 屬性名():返回只讀的整個集合的引用,返回的集合類型是const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >&,可以使用iterator來迭代遍歷,可用于修改;

  • mutable_屬性():返回可修改的整個集合的指針,返回的集合類型::google::protobuf::RepeatedField< ::google::protobuf::int64 >*,可以使用iterator來迭代遍歷,可用于修改;

  • set_屬性名(int,x):設置repeated中元素的值

4)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編碼進output

  • SerializedToArray(void*,int)把message編碼進數組buff

  • SerializedToOstream(ostream*)把message編碼到輸出流

  • ByteSize()獲取二進制字節序的大小,可用于初始化存放容器

反序列化

  • ParseFromString(std::string& data) 把data解碼到message

  • ParseFromArray(char* buf,int size)把buf解碼到message,效率比第一個快很多

  • ParseFromIstream(istream*)從istream輸入流解碼到message

  • has_xxx()用于檢查相應字段是否存在數據

  • xxx_size()用于確定repeated字段是否存在,0表示未序列化

“c++中不同字段的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

车险| 宁城县| 多伦县| 永德县| 新野县| 宜黄县| 兰西县| 读书| 桂平市| 盐城市| 永济市| 乌苏市| 濮阳县| 水富县| 镶黄旗| 长乐市| 腾冲县| 女性| 金乡县| 新巴尔虎左旗| 舞钢市| 香格里拉县| 修水县| 潼南县| 剑河县| 新闻| 屯昌县| 苗栗市| 澄城县| 乡城县| 增城市| 芦溪县| 乌审旗| 弥勒县| 南丹县| 长乐市| 泊头市| 广安市| 东宁县| 澄江县| 额尔古纳市|