protobuf 的 C++函数使用手册

Posted 看,未来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了protobuf 的 C++函数使用手册相关的知识,希望对你有一定的参考价值。

使用message

类成员变量的访问

在生成的.h文件中定义了类成员的访问方法。例如,对于Person类,定义了name、id、email、phone等成员的访问方法。

获取成员变量值直接采用使用成员变量名(全部为小写),设置成员变量值,使用在成员变量名前加set_的方法。

对于普通成员变量(required和optional)提供has_方法判断变量值是否被设置;提供clear_方法清除设置的变量值。

对于string类型,提供多种set_方法,其参数不同。同时,提供了一个mutable_方法,返回变量值的可修改指针。

对于repeated变量,提供了其它一些特殊的方法:

_size方法:返回repeated field’s
通过下脚标访问其中的数组成员
通过下脚标返回其中的成员的mutable_的方法
_add方法:增加一个成员。
// name
inlinebool has_name()const;
inlinevoid clear_name();
inlineconst::std::string& name()const;
inlinevoid set_name(const::std::string& value);
inlinevoid set_name(constchar* value);
inline::std::string* mutable_name();
 
 
 
// id
inlinebool has_id()const;
inlinevoid clear_id();
inline int32_t id()const;
inlinevoid set_id(int32_t value);
 
 
 
// email
inlinebool has_email()const;
inlinevoid clear_email();
inlineconst::std::string& email()const;
inlinevoid set_email(const::std::string& value);
inlinevoid set_email(constchar* value);
inline::std::string* mutable_email();
 
 
 
// phone(那俩不会用的我已经删掉了,不用也罢)
inlineint phone_size()const;
inlinevoid clear_phone();
inlineconst::tutorial::Person_PhoneNumber& phone(int index)const;
inline::tutorial::Person_PhoneNumber* mutable_phone(int index);
inline::tutorial::Person_PhoneNumber* add_phone();

编码和解码函数

每个message类都提供了写入和读取message数据的方法,包括:

bool SerializeToString(string* output) const;把message编码进output。 
bool ParseFromString(const string& data);从string解码到message
bool SerializeToArray(char* buf,int size) const;把message编码进数组buf.
bool ParseFromArray(const char* buf,int size);把buf解码到message。
此解码方法效率较ParseFromString高很多,所以一般用这种方法解码,而且IO函数一般是以char*交流的,不是string。
bool SerializeToOstream(ostream* output) const;把message编码进ostream
bool ParseFromIstream(istream* input);从istream解码到message

发送接收端所使用的加码解码方法不一定非得配对,即发送端用SerializeToString 接收端不一定非得用ParseFromString ,可以使用其他解码方法。

以上是关于protobuf 的 C++函数使用手册的主要内容,如果未能解决你的问题,请参考以下文章

Protobuf使用手册

在 C++ 中更改现有 protobuf 消息的元素

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

使用协议缓冲区/Protobuf 的 PInvoke 通用字符串格式

在 Java 和 C++ 应用程序中使用 protobuf 解析时出错

protobuf-net 缺少可选字段的 has_ 函数?