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);
相關文章
- PHP生成器的使用PHP
- python中生成器的使用Python
- Laravel Url 生成的使用規範Laravel
- yaf程式碼生成工具的使用
- 使用 GAN 生成新的遊戲角色遊戲
- 動態庫的生成和使用(二)
- 生成樹協議與多生成樹協議協議
- KALDI-IO庫的生成與讀取
- 生成器與迭代器的區別
- 探索生成式AI的未來:Chat與Agent的較量與融合AI
- 如何使用maven生成可以執行的jar?MavenJAR
- 前端使用canvas生成盲水印的加密解密前端Canvas加密解密
- 使用BERT生成句向量
- 使用Angular CLI生成路由Angular路由
- 如何使用 IdGen 生成 UIDUI
- java使用poi生成excelJavaExcel
- Laravel-ide-helper 生成單個模型文件與 readme 使用方法不同LaravelIDE模型
- 迭代器與生成器
- 生成表格與合併表格
- 隨機字串生成與排序隨機字串排序
- 生成樹與鏈路聚合
- 設計稿生成程式碼與 Serverless 的前世今生與未來!Server
- 語音生成口型與表情技術的演進與未來
- 我是如何使用freemarker生成Word檔案的?
- 使用【APIDOC】生成JavaWeb的API文件(HTML,MarkDown,PDF)APIJavaWebHTML
- 動態連結庫的生成和使用(二)
- plsql中資料生成工具data generator的使用SQL
- 使用 Python 生成二維碼Python
- 【Python】生成html文件-使用dominatePythonHTML
- 生成Dll在Unity中使用Unity
- 使用IcoMoon生成圖示字型
- 如何使用python生成器Python
- captcha.js一個生成驗證碼的外掛,使用js和canvas生成APTJSCanvas
- Python3中的列表生成式、生成器與迭代器例項詳解Python
- Quick BI 的模型設計與生成SQL原理剖析UI模型SQL
- OC記憶體管理--物件的生成與銷燬記憶體物件
- C++實現迷宮的生成與解決C++
- 生成函式與多項式函式