C++Protobuf的生成與使用
編寫.proto檔案
- syntax:表明protobuf的版本號(末尾不要忘了;)
- package:表明生成的類物件位於哪一個名稱空間(末尾不要忘了;)
- 每一個類屬性後面的必須跟一個編號,且不能重複
syntax="proto3";
package Protocol;
message User{
string name=1;
int32 age=2;
}
message UserGroup{
repeated User userList=1;
}
.proto檔案轉為c++類
寫一個run.bat的批處理檔案(只要是xxx.bat就行)
- xxx.exe:用於生成類的可執行檔案
- –cpp_out:指定生成的類物件為cpp且檔案儲存至後面的相對路徑下
- xxx.proto:用於參照的proto檔案(相對路徑)
- pause:在執行完成後暫停視窗(不寫視窗一閃就關閉了),如果有報錯就便於定位修改
如果我們有多個.proto檔案那就寫多行這個命令(.bat是批處理命令檔案,都能執行),只根據不同的需求修改某些內容即可
protoc.exe --cpp_out=ProtobufTest2 User.proto
pause
點選.bat檔案,然後你就能在寫的路徑下看見這些自動生成的cpp檔案(仔細閱讀黑窗裡的文字,如果有錯誤照著修改即可)
C++使用Protobuf物件
/*************************屬性獲取與修改**********************************/
Protocol::User user;
user.set_age(10);//設定物件的屬性
int age = user.age();//獲得物件屬性
Protocol::UserGroup UG;
auto p= UG.add_userlist();//在陣列屬性中增加一個元素,返回的是指向增加元素的指標
*p = user;//通過指標修改新增元素
Protocol::User user2 = UG.userlist(0);//獲得陣列屬性中指定下標元素(沒有索引的方式)
/***********************************序列化與反序列化***************************************/
string str;
UG.SerializeToString(&str);
Protocol::UserGroup UG2;
UG2.ParseFromString(str);
/****************************************反射********************************************/
string protoName="Protocol.UserGroup";//需要生成的類名字(前面是命名,名稱空間的名稱)
//通過DescriptorPool獲得物件的descriptor
auto descriptor = google::protobuf::DescriptorPool::generated_pool()->FindMessageTypeByName(protoName);
//使用descriptor獲得物件型別
auto type = google::protobuf::MessageFactory::generated_factory()->GetPrototype(descriptor);
//例項化
auto message = type->New();
//為例項化的物件反序列化資料
message->ParseFromString(str);
相關文章
- mac下證書的生成與使用Mac
- LINUX庫的使用與生成(轉)Linux
- linux靜態庫的生成與使用(轉)Linux
- Linux 動態庫生成與使用指南Linux
- Linux動態庫生成與使用指南Linux
- PHP生成器的使用PHP
- Laravel Url 生成的使用規範Laravel
- 使用 GAN 生成新的遊戲角色遊戲
- yaf程式碼生成工具的使用
- Patch檔案的生成和使用
- 使用eclipse生成git的sshEclipseGit
- 生成器與反射反射
- 生成樹協議與多生成樹協議協議
- python中生成器的使用Python
- 動態庫的生成和使用(二)
- 生成器與迭代器的區別
- KALDI-IO庫的生成與讀取
- 探索生成式AI的未來:Chat與Agent的較量與融合AI
- java使用poi生成excelJavaExcel
- 使用Angular CLI生成路由Angular路由
- 使用OpenSSL生成證書
- 使用Flex生成GUIDFlexGUI
- 隨機字串生成與排序隨機字串排序
- models生成與載入
- excel表格生成與匯入Excel
- 生成模型與判別模型模型
- 生成表格與合併表格
- 如何使用maven生成可以執行的jar?MavenJAR
- plsql中資料生成工具data generator的使用SQL
- 前端使用canvas生成盲水印的加密解密前端Canvas加密解密
- 隨筆-openssl證書的生成和使用
- 使用dbms_stats但不生成histogram的方法Histogram
- 設計稿生成程式碼與 Serverless 的前世今生與未來!Server
- 語音生成口型與表情技術的演進與未來
- 生成Dll在Unity中使用Unity
- 使用 Python ElementTree 生成 xmlPythonXML
- 使用JCaptcha生成驗證碼APT
- 使用sql生成sql指令碼SQL指令碼