您的位置:首页 > 编程语言 > C语言/C++

[ProtoBuf]ProtoBuf命令生成的Cpp文件分析

2017-09-26 01:14 489 查看

生成文件

在[ProtocolBuffer]定义ProtocolBuffer消息中的Person.proto文件用命令protoc.exe  --cpp_out=./ Person.proto
生成的Person.pb.h和Person.pb.cc;Person.pb.h其关键部分代码如下:
namespace tutorial {

// Internal implementation detail -- do not call these.
void protobuf_AddDesc_Person_2eproto();
void protobuf_AssignDesc_Person_2eproto();
void protobuf_ShutdownFile_Person_2eproto();

class Person;
class Person_PhoneNumber;
class AddressBook;

enum Person_PhoneType {
Person_PhoneType_MOBILE = 0,
Person_PhoneType_HOME = 1,
Person_PhoneType_WORK = 2
};

...

class Person_PhoneNumber : public ::google::protobuf::Message {
public:
Person_PhoneNumber();
virtual ~Person_PhoneNumber();
...
Person_PhoneNumber(const Person_PhoneNumber& from);

inline Person_PhoneNumber& operator=(const Person_PhoneNumber& from) {
CopyFrom(from);
return *this;
}

void Swap(Person_PhoneNumber* other);
...
// implements Message ----------------------------------------------

Person_PhoneNumber* New() const;
void CopyFrom(const ::google::protobuf::Message& from);
void MergeFrom(const ::google::protobuf::Message& from);
void CopyFrom(const Person_PhoneNumber& from);
void MergeFrom(const Person_PhoneNumber& from);
void Clear();
bool IsInitialized() const;

int GetCachedSize() const { return _cached_size_; }
public:
...

// nested types ----------------------------------------------------

// accessors -------------------------------------------------------

// required string number = 1;
inline bool has_number() const;
inline void clear_number();
static const int kNumberFieldNumber = 1;
inline const ::std::string& number() const;
inline void set_number(const ::std::string& value);
inline void set_number(const char* value);
inline void set_number(const char* value, size_t size);
inline ::std::string* mutable_number();
inline ::std::string* release_number();
inline void set_allocated_number(::std::string* number);

// optional .tutorial.Person.PhoneType type = 2 [default = HOME];
inline bool has_type() const;
inline void clear_type();
static const int kTypeFieldNumber = 2;
inline ::tutorial::Person_PhoneType type() const;
inline void set_type(::tutorial::Person_PhoneType value);

// @@protoc_insertion_point(class_scope:tutorial.Person.PhoneNumber)
private:
inline void set_has_number();
inline void clear_has_number();
inline void set_has_type();
inline void clear_has_type();

::std::string* number_;
int type_;
...
static Person_PhoneNumber* default_instance_;
};

如何使用

使用形式1

int main(void)
{
Person msg1;
msg1.set_id(101);
msg1.set_name("hello");
cout<<msg1.id()<<endl;
cout<<msg1.name()<<endl;
system("pause");
return 0;
}
/*输出
101
hello
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: