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

生成文件

在[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<



你可能感兴趣的:(序-列-化)