protocol buffer虽然很好用,但是每次修改proto文件之后就需要重新编译生成消息代码,然后再相应的修改应用程序,用久了就有了繁琐的感觉,还好protocol buffer也提供了动态解析的功能,虽然效率低了点,但也是可以接受的(用protocol buffer3.0测试大概慢了5倍左右)。
proto文件如下,my.proto
syntax = "proto3";
message mymsg
{
uint32 len = 1;
uint32 typ = 2;
}
动态编码
#include <iostream>
#include <string>
#include <google/protobuf/descriptor.h>
#include <google/protobuf/descriptor.pb.h>
#include <google/protobuf/dynamic_message.h>
#include <google/protobuf/compiler/importer.h>
using namespace std;
using namespace google::protobuf;
using namespace google::protobuf::compiler;
int main()
{
DiskSourceTree sourceTree;
sourceTree.MapPath("", "./");
Importer importer(&sourceTree, NULL);
importer.Import("my.proto");
const