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

生成文件 在[ProtocolBuffer]定义ProtocolBuffer消息中的Person.proto文件用命令protoc.exe--cpp_out=./ Person.proto
【[ProtoBuf]ProtoBuf命令生成的Cpp文件分析】生成的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<






    推荐阅读