Skip to content

[C++, master] No constructor with arguments if struct consists only of fixed-length arrays #5865

@saber-nyan

Description

@saber-nyan

For example, here is a part of a schema file:

struct TcpStreamMetadata {
  numOfDataPackets:[uint32:2];
  numOfMessages:[uint32:2];
  numOfBytes:[uint32:2];
}

table TcpStream {
  metadata:TcpStreamMetadata (required);

  srcPort:uint16;
  dstPort:uint16;
  startTimeUsec:uint64;
  endTimeUsec:uint64;
}

I run flatc --cpp -o ./flatbuffers/ --no-prefix --scoped-enums --gen-name-strings --gen-compare --cpp-str-flex-ctor ./flatbuff-schema/redis_tcp_stream_publish.fbs, then the following C++ header is generated from the schema:

FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) TcpStreamMetadata FLATBUFFERS_FINAL_CLASS {
 private:
  uint32_t numOfDataPackets_[2];
  uint32_t numOfMessages_[2];
  uint32_t numOfBytes_[2];

 public:
  static FLATBUFFERS_CONSTEXPR const char *GetFullyQualifiedName() {
    return "PackmatePP.FlatBuf.TcpStreamMetadata";
  }
  TcpStreamMetadata() {
    memset(static_cast<void *>(this), 0, sizeof(TcpStreamMetadata));
  }
  const flatbuffers::Array<uint32_t, 2> *numOfDataPackets() const {
    return reinterpret_cast<const flatbuffers::Array<uint32_t, 2> *>(numOfDataPackets_);
  }
  const flatbuffers::Array<uint32_t, 2> *numOfMessages() const {
    return reinterpret_cast<const flatbuffers::Array<uint32_t, 2> *>(numOfMessages_);
  }
  const flatbuffers::Array<uint32_t, 2> *numOfBytes() const {
    return reinterpret_cast<const flatbuffers::Array<uint32_t, 2> *>(numOfBytes_);
  }
};
FLATBUFFERS_STRUCT_END(TcpStreamMetadata, 24);

inline bool operator==(const TcpStreamMetadata &lhs, const TcpStreamMetadata &rhs) {
  return
      (lhs.numOfDataPackets() == rhs.numOfDataPackets()) &&
      (lhs.numOfMessages() == rhs.numOfMessages()) &&
      (lhs.numOfBytes() == rhs.numOfBytes());
}

inline bool operator!=(const TcpStreamMetadata &lhs, const TcpStreamMetadata &rhs) {
    return !(lhs == rhs);
}

How can I create TcpStreamMetadata instance with some data (numOfDataPackets, numOfBytes, ... ), if there is no constructor other than default?

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions