#include <stdio.h>
#include <time.h>
#include <iostream>
#include "test.pb.h"
using namespace std;
using namespace google::protobuf;
Message* CreateMessage(const std::string& msg)
{
Message* message = NULL;
const Descriptor* descriptor = DescriptorPool::generated_pool()->FindMessageTypeByName("test." + msg);
if (descriptor)
{
const Message* prototype = MessageFactory::generated_factory()->GetPrototype(descriptor);
if (prototype)
{
message = prototype->New();
}
}
return message;
}
void ReleaseMessage(Message* pMsg)
{
if (NULL != pMsg)
{
pMsg->Clear();
delete pMsg;
}
}
int main (int argc, char** argv)
{
test::persion persion;
persion.set_name("jiangxf");
cout << "persion name " << persion.name() << endl;
Message* pMsg = CreateMessage("persion");
const Descriptor* pDescriptor = DescriptorPool::generated_pool()->FindMessageTypeByName("test.persion");
const Reflection* pReflection = pMsg->GetReflection();
for (int i = 0; i < pDescriptor->field_count(); ++i)
{
const FieldDescriptor* pFieldDescriptor = pDescriptor->field(i);
const std::string& strFieldName = pFieldDescriptor->name();
cout << strFieldName << endl;
}
return 1;
}
protobuf反射机制测试
最新推荐文章于 2022-03-01 01:39:57 发布