2012-06-04 33 views
6

Đọc vào Protocol Buffer Basics: C++, không tìm thấy gì khớp với tình huống :; với sau .proto xử lý với --cpp_out,Protobuf: các trường tùy chọn lồng nhau (tùy chỉnh) sẽ được xử lý trong C++ như thế nào?

message A { 
required int32 foo = 1; 
} 
message B { 
optional A data = 1; 
} 

không rõ ràng nhìn accessor/setter được tạo ra để thiết lập lĩnh vực tùy chỉnh tùy chọn (bao gồm cả phần 'loại lồng' mà tôi quá lười biếng để đặt ở đây):

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

    // optional .A = 1; 
    inline bool has_a() const; 
    inline void clear_a(); 
    static const int kAFieldNumber = 1; 
    inline const ::A& a() const; 
    inline ::A* mutable_a(); 
    inline ::A* release_a(); 

Vì vậy, cách đặt B :: A thành một số phiên bản trong C++?


THI FILES: .proto, tạo ra kết quả: .h, .cc và một số .java


UPD: trong Java, trường lồng nhau được thiết lập thông qua Builder: xem liên kết ở trên ví dụ (xem cho setData).

Trả lời

10

Giải pháp: sử dụng có thể thay đổi để sửa đổi một số doodad được trả lại.

A a; 
A.set_foo(1); 

B b; 
B.mutable_A()->CopyFrom(a); 
Các vấn đề liên quan