2012-06-04 9 views
6

Leyendo en Protocol Buffer Basics: C++, no encontró nada que coincida con la situación :; con la siguiente .proto procesado con --cpp_out,Protobuf: ¿cómo los campos opcionales anidados (personalizados) deben manejarse en C++?

message A { 
required int32 foo = 1; 
} 
message B { 
optional A data = 1; 
} 
se genera ningún

obviamente buscando descriptor de acceso/definidor para establecer campo personalizado opcional (incluida la sección '' tipos anidados, que soy demasiado perezoso para poner aquí):

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

Así que, cómo configurar B :: A en alguna instancia A en C++?


archivos de prueba: .proto, generan resultados: .h, .cc y algunos .java


UPD: en Java, los campos anidados se ajustan a través del constructor: ver enlace anterior, por ejemplo (se ven para setData).

Respuesta

10

Solución: use mutable para modificar alguna doodad devuelta.

A a; 
A.set_foo(1); 

B b; 
B.mutable_A()->CopyFrom(a); 
Cuestiones relacionadas