问题描述
问题描述
我在 protobuf 中添加了以下枚举结构:
enum FooType {
INVALID = 0;
OW = 1;
RT = 2;
OJ = 3;
MC = 4;
}
[...]
optional FooType foo_type = 22 [default = INVALID];
如果我们插入一个大于 4
的值会发生什么?这个想法是,每个大于 4
的值都应该是 INVALID
。我正在检查我这边的代码。
if(Foo > 4) {
Foo = 0;
}
//add to protobuf
这个解决方案看起来很脏。有没有办法在 protobuf 中的某处设置该条件。
case 22: {
if (tag == 176) {
parse_itinerary_type:
int value;
DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
int,::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
input,&value)));
if (::sss::model::protoBom::common::Context_FooType_IsValid(value)) {
set_itinerary_type(static_cast< ::sss::model::protoBom::common::Context_FooType >(value));
} else {
mutable_unkNown_fields()->AddVarint(22,value);
}
} else {
goto handle_unusual;
}
if (input->ExpectAtEnd()) goto success;
break;
}
我不明白 mutable_unkNown_fields()->AddVarint(22,value);
分配的值不是默认值。这只是我们作为参数发送的值。
其中:
bool Context_Footype_IsValid(int value) {
switch(value) {
case 0:
case 1:
case 2:
case 3:
case 4:
return true;
default:
return false;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)