簡體   English   中英

為什么c ++中沒有Set方法用於重復的protobuf字段?

[英]Why is there no Set method in c++ for a repeated protobuf field?

我使用以下.proto文件:

message Header
{
    enum MessageType
    {
        UNKNOWN = 0;
        CONNECT = 1;
        DISCONNECT = 2;
        UPDATE = 3;
        REQUEST = 4;
        SUBSCRIBE = 5;
        UNSUBSCRIBE = 6;
    }
    required MessageType msgType = 1;
}

message DataSet
{
    optional string id = 1;
    optional string value = 2;
}

message StdMessage
{
    required Header header = 1;
    repeated DataSet dataSet = 2;
}

這是編譯的StdMessage類:

class StdMessage : public ::google::protobuf::Message {
 public:
  StdMessage();
  virtual ~StdMessage();

  StdMessage(const StdMessage& from);

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

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
    return _unknown_fields_;
  }

  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
    return &_unknown_fields_;
  }

  static const ::google::protobuf::Descriptor* descriptor();
  static const StdMessage& default_instance();

  void Swap(StdMessage* other);

  // implements Message ----------------------------------------------

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

  int ByteSize() const;
  bool MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input);
  void SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const;
  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
  int GetCachedSize() const { return _cached_size_; }
  private:
  void SharedCtor();
  void SharedDtor();
  void SetCachedSize(int size) const;
  public:

  ::google::protobuf::Metadata GetMetadata() const;

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

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

  // required .Header header = 1;
  inline bool has_header() const;
  inline void clear_header();
  static const int kHeaderFieldNumber = 1;
  inline const ::Header& header() const;
  inline ::Header* mutable_header();
  inline ::Header* release_header();

  // repeated .DataSet dataSet = 2;
  inline int dataset_size() const;
  inline void clear_dataset();
  static const int kDataSetFieldNumber = 2;
  inline const ::DataSet& dataset(int index) const;
  inline ::DataSet* mutable_dataset(int index);
  inline ::DataSet* add_dataset();
  inline const ::google::protobuf::RepeatedPtrField< ::DataSet >&
      dataset() const;
  inline ::google::protobuf::RepeatedPtrField< ::DataSet >*
      mutable_dataset();

  // @@protoc_insertion_point(class_scope:StdMessage)
 private:
  inline void set_has_header();
  inline void clear_has_header();

  ::google::protobuf::UnknownFieldSet _unknown_fields_;

  ::Header* header_;
  ::google::protobuf::RepeatedPtrField< ::DataSet > dataset_;

  mutable int _cached_size_;
  ::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];

  friend void  protobuf_AddDesc_xplane_2eproto();
  friend void protobuf_AssignDesc_xplane_2eproto();
  friend void protobuf_ShutdownFile_xplane_2eproto();

  void InitAsDefaultInstance();
  static StdMessage* default_instance_;
};
// -------------------------------------------------------------------

在編譯/生成的cpp文件中, StdMessage類中沒有set_header或類似函數。 我的問題是,如何設置StdMessage的標題? 提前致謝。

使用mutable_header()方法獲取指向已創建的Header實例的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM