2012-06-04 11 views
6

Protocol Buffer Basics: C++ में पढ़ना, कुछ भी नहीं मिला जो स्थिति से मेल खाता है :; निम्नलिखित --cpp_out के साथ कार्रवाई की .proto, साथप्रोटोबफ: सी ++ में कैसे नेस्टेड (कस्टम) वैकल्पिक फ़ील्ड को संभाला जाना है?

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

कोई स्पष्ट रूप से देख एक्सेसर/सेटर ('नेस्ट प्रकार' अनुभाग जो मैं भी यहाँ डाल करने के लिए आलसी हूँ सहित) कस्टम वैकल्पिक फ़ील्ड सेट करने के लिए उत्पन्न होता है:

// 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(); 

तो, बी :: ए को कुछ उदाहरणों में सी ++ में कैसे सेट करें?


टेस्ट फ़ाइलें: .proto, जिसके परिणामों: .h, .cc और कुछ .java


Upd: जावा में, एकत्रित फ़ील्ड बिल्डर के माध्यम से स्थापित कर रहे हैं: उदाहरण के लिए ऊपर लिंक देखें (देखो सेटडाटा) के लिए।

उत्तर

10

समाधान: कुछ लौटे डूडैड को संशोधित करने के लिए उत्परिवर्तनीय उपयोग करें।

A a; 
A.set_foo(1); 

B b; 
B.mutable_A()->CopyFrom(a); 
संबंधित मुद्दे