在 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 reflection 编写一些代码它遍历复制的消息并删除所有长尺寸的 bytes
类型的字段。
关于c++ - 打印 Protobuf 消息时省略字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32639891/