最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

protobuf c++編程筆記

 更新時間:2021年08月23日 15:52:45   作者:龍海L  
這篇文章主要介紹了Protobuf的c++編程筆記,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

字段內(nèi)容的定義

//文件名: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

表示屬性值為可選項,不指定使用默認(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)

不同字段的方法

1)optional修飾的基本類型:

  • set_屬性名(val) :初始化修改屬性值;
  • 屬性名():獲取屬性值,只讀模式,返回類型是::google::protobuf::int64;

2)optional修飾的對象類型:

  • 屬性名():返回只讀的屬性類型對象的引用,屬性類型是指pb中定義的對象;
  • mutable_屬性名():返回可修改的屬性類型對象的指針,屬性類型是指pb中定義的對象;
  • set_屬性名():初始化設(shè)置字段值

3)repeated修飾的基本類型:

  • add_屬性名(val):向?qū)傩约现刑砑釉兀?/li>
  • 屬性名_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中元素的值

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編碼進(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表示未序列化

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 函數(shù)外初始化與函數(shù)內(nèi)初始化詳細(xì)解析

    函數(shù)外初始化與函數(shù)內(nèi)初始化詳細(xì)解析

    函數(shù)內(nèi)初始化:bool FillStr(char *&szDst, int nSize);第一個參數(shù)中的&一定不能少,這是因為在函數(shù)外部我們只聲明了這個指針,具體這個指針指向內(nèi)存中的哪個地址我們并不知道,所以&是為了說明傳遞的是這個指針的引用,那么在函數(shù)內(nèi)初始化后這個指針的地址也就是外面指針的地址了
    2013-09-09
  • C語言中雙向鏈表和雙向循環(huán)鏈表詳解

    C語言中雙向鏈表和雙向循環(huán)鏈表詳解

    這篇文章主要介紹了C語言中雙向鏈表和雙向循環(huán)鏈表詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • OpenCV利用背景建模檢測運(yùn)動物體

    OpenCV利用背景建模檢測運(yùn)動物體

    這篇文章主要為大家詳細(xì)介紹了OpenCV利用背景建模檢測運(yùn)動物體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++中引用&與取地址&的區(qū)別分析

    C++中引用&與取地址&的區(qū)別分析

    這篇文章主要介紹了C++中引用&與取地址&的區(qū)別,有助于C++初學(xué)者更好的掌握指針的概念及用法,需要的朋友可以參考下
    2014-09-09
  • Qt實現(xiàn)獲取基本網(wǎng)絡(luò)信息

    Qt實現(xiàn)獲取基本網(wǎng)絡(luò)信息

    這篇文章主要為大家詳細(xì)介紹了Qt實現(xiàn)獲取基本網(wǎng)絡(luò)信息的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • 基于C++ bitset常用函數(shù)及運(yùn)算符(詳解)

    基于C++ bitset常用函數(shù)及運(yùn)算符(詳解)

    下面小編就為大家?guī)硪黄贑++ bitset常用函數(shù)及運(yùn)算符(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 深入分析Linux下如何對C語言進(jìn)行編程

    深入分析Linux下如何對C語言進(jìn)行編程

    本篇文章介紹了,如何在Linux下對C語言進(jìn)行編程的詳細(xì)概述。需要的朋友參考下
    2013-05-05
  • c++ 開發(fā)中如何讀寫yaml配置文件

    c++ 開發(fā)中如何讀寫yaml配置文件

    這篇文章主要介紹了c++ 開發(fā)中如何讀寫yaml配置文件,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • C++中實現(xiàn)保存數(shù)據(jù)到CSV文件

    C++中實現(xiàn)保存數(shù)據(jù)到CSV文件

    這篇文章主要介紹了C++中實現(xiàn)保存數(shù)據(jù)到CSV文件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C/C++實現(xiàn)手寫數(shù)字識別的示例詳解

    C/C++實現(xiàn)手寫數(shù)字識別的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用C/C++實現(xiàn)手寫數(shù)字識別,分別處理 32*32 文本數(shù)據(jù)集和mnist 28*28 png數(shù)據(jù)集,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-10-10

最新評論

永春县| 永定县| 开原市| 类乌齐县| 积石山| 偃师市| 北海市| 普宁市| 平阴县| 四子王旗| 石门县| 清徐县| 定远县| 巴南区| 台中县| 鄂尔多斯市| 临海市| 虞城县| 宁波市| 永顺县| 乌审旗| 木里| 华阴市| 通城县| 冷水江市| 沂南县| 金阳县| 平邑县| 郑州市| 连山| 延吉市| 东丽区| 长岭县| 泾源县| 马尔康县| 行唐县| 东辽县| 灵台县| 潞城市| 庆阳市| 钦州市|