打印Protobuf消息时省略字段
Omit fields when printing Protobuf message
在Google Protobuf中调用message.DebugString()
时,是否可以选择要考虑的字段或至少考虑的字段类型?
我有以下消息描述:
message Message
{
optional string name = 1
optional int32 blockSize = 2;
optional bytes block = 3;
}
我只想打印name
和blockSize
,并省略block
字段,该字段恰好很大(例如:64KB(,其内容无关紧要。
我构建了一个方法,专门向std::stringstream
中只添加感兴趣的字段,但似乎每次更改消息描述时都必须修改该方法。
最好的办法是复制消息,从副本中清除block
,然后打印。
Message copy = original;
copy.clear_block();
cout << copy.DebugString() << endl;
请注意,这里没有性能问题,因为DebugString()
本身已经比复制消息慢了很多。
如果你想让它更通用,你可以写一些基于protobuf反射的代码,它遍历复制的消息,并删除所有长尺寸的bytes
类型的字段。
相关文章:
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 使用同一类中的方法重新分配字段时出现问题
- 实例化时结构字段中的默认值
- 有没有办法在链接时设置精灵需要字段?
- 确定输入"conscalc: calc"的类型时出错。不能联合编码器。具有不同字段集的结构类型
- 使用固定大小类型时强制对位字段(C++14 之前)进行签名
- 如何在 中输入记录的一个字段时搜索记录
- 定义静态类字段时多个已定义符号的链接器错误
- C++,sqlite3.当 BLOB 字段用作查询条件时如何处理它?
- 动态链接到 c++ 静态成员字段时符号查找失败
- 当指定初始化程序的顺序和字段声明不一致时,clang可以删除函数调用
- 使用 boost::geometry::追加时,自定义点类中的 ID 字段间歇性丢失
- 在编译时使用模板在跨结构字段中迭代
- C 运行时字段访问
- 当您有结构名称和字段值的列表时,是否可以以编程方式创建结构的对象并填充字段
- 在AD中尝试更新我自己的字段时,一般访问被拒绝
- ADO 创建参数在尝试从 C++ 写入 Oracle 的 RAW(16) 字段时失败并出现0x800A0D5D
- 在谷歌协议缓冲区中设置重复字段时出错
- 尝试访问向量中对象中的字段时出现Segfault
- 只有在填充了两个字段时才启用按钮