【问题标题】:Does protobuf message (c++) class provide method like size() and empty()?protobuf message (c++) 类是否提供 size() 和 empty() 之类的方法?
【发布时间】:2021-05-28 08:50:01
【问题描述】:

例如,我们定义一个Person 消息。

message Person {
   int32 age = 1;
   string name = 2;
};

我想通过以下方式使用此消息:

Person p;
assert(p.empty());
p.set_age(10);
assert(p.size() == 1);  // True
p.Clear()
assert(p.empty()) // True

这可能吗?

【问题讨论】:

  • “size”到底应该返回什么?

标签: c++ protocol-buffers


【解决方案1】:

关于您想要拥有empty() 函数的愿望,您可以将has() 函数用于proto3 中的可选字段。从version 3.15 开始添加。这个answer给出了一个例子。

【讨论】:

  • 好的,所以唯一的方法是迭代所有字段名称并检查所有has_xyz方法是否返回false。
  • 可能是的,嵌套在其他消息中的消息可能存在捷径。嵌套的消息在父 I 中有一个 has_ 函数,如果至少设置了一个变量,我会说返回 true
  • 谢谢。在我的情况下,该消息不是另一条消息中的字段。也许我可以改用 DebugString().empty()。
猜你喜欢
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
相关资源
最近更新 更多