protocol buffer使用举例

来源:互联网 发布:上海交通大学知乎 编辑:程序博客网 时间:2024/05/29 02:39

#include "thirdparty/google/protobuf/descriptor.h"

#include "thirdparty/google/protobuf/descriptor.pb.h"#include "thirdparty/google/protobuf/dynamic_message.h"#include "thirdparty/google/protobuf/compiler/importer.h"#include "thirdparty/google/protobuf/message.h"#include "common_test/protocolbuff/foo.pb.h"#include <iostream>#include <string>using namespace std;using namespace google::protobuf;using namespace google::protobuf::compiler;int main(int argc, char* argv[]){    Foo foo;    foo.set_text("Hello World!");    foo.add_numbers(1);    foo.add_numbers(5);    foo.add_numbers(42);    const Descriptor* descriptor = foo.GetDescriptor();    const FieldDescriptor* text_field = descriptor->FindFieldByName("text");    assert(text_field != NULL);    assert(text_field->type() == FieldDescriptor::TYPE_STRING);    assert(text_field->label() == FieldDescriptor::LABEL_OPTIONAL);    const FieldDescriptor* numbers_field = descriptor->FindFieldByName("numbers");    assert(numbers_field != NULL);    assert(numbers_field->type() == FieldDescriptor::TYPE_INT32);    assert(numbers_field->label() == FieldDescriptor::LABEL_REPEATED);    const Reflection* reflection = foo.GetReflection();    cout << reflection->GetString(foo, text_field) << endl;    cout << reflection->FieldSize(foo, numbers_field) << endl;    cout << reflection->GetRepeatedInt32(foo, numbers_field, 0) << endl;    cout << reflection->GetRepeatedInt32(foo, numbers_field, 1) << endl;    cout << reflection->GetRepeatedInt32(foo, numbers_field, 2) << endl;    return 0;}


0 0
原创粉丝点击