生成文件 在[ProtocolBuffer]定义ProtocolBuffer消息中的Person.proto文件用命令protoc.exe--cpp_out=./ Person.proto
【[ProtoBuf]ProtoBuf命令生成的Cpp文件分析】生成的Person.pb.h和Person.pb.cc;
Person.pb.h其关键部分代码如下:
namespace tutorial {// Internal implementation detail -- do not call these.
void protobuf_AddDesc_Person_2eproto();
void protobuf_AssignDesc_Person_2eproto();
void protobuf_ShutdownFile_Person_2eproto();
class Person;
class Person_PhoneNumber;
class AddressBook;
enum Person_PhoneType {
Person_PhoneType_MOBILE = 0,
Person_PhoneType_HOME = 1,
Person_PhoneType_WORK = 2
};
...class Person_PhoneNumber : public ::google::protobuf::Message {
public:
Person_PhoneNumber();
virtual ~Person_PhoneNumber();
...
Person_PhoneNumber(const Person_PhoneNumber& from);
inline Person_PhoneNumber& operator=(const Person_PhoneNumber& from) {
CopyFrom(from);
return *this;
}void Swap(Person_PhoneNumber* other);
...
// implements Message ----------------------------------------------Person_PhoneNumber* New() const;
void CopyFrom(const ::google::protobuf::Message& from);
void MergeFrom(const ::google::protobuf::Message& from);
void CopyFrom(const Person_PhoneNumber& from);
void MergeFrom(const Person_PhoneNumber& from);
void Clear();
bool IsInitialized() const;
int GetCachedSize() const { return _cached_size_;
}
public:
...// nested types ----------------------------------------------------// accessors -------------------------------------------------------// required string number = 1;
inline bool has_number() const;
inline void clear_number();
static const int kNumberFieldNumber = 1;
inline const ::std::string& number() const;
inline void set_number(const ::std::string& value);
inline void set_number(const char* value);
inline void set_number(const char* value, size_t size);
inline ::std::string* mutable_number();
inline ::std::string* release_number();
inline void set_allocated_number(::std::string* number);
// optional .tutorial.Person.PhoneType type = 2 [default = HOME];
inline bool has_type() const;
inline void clear_type();
static const int kTypeFieldNumber = 2;
inline ::tutorial::Person_PhoneType type() const;
inline void set_type(::tutorial::Person_PhoneType value);
// @@protoc_insertion_point(class_scope:tutorial.Person.PhoneNumber)
private:
inline void set_has_number();
inline void clear_has_number();
inline void set_has_type();
inline void clear_has_type();
::std::string* number_;
int type_;
...
static Person_PhoneNumber* default_instance_;
};
如何使用 使用形式1
int main(void)
{
Person msg1;
msg1.set_id(101);
msg1.set_name("hello");
cout<