gpt4 book ai didi

c++ - Protobuf 默认值

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:23 25 4
gpt4 key购买 nike

我有一个注册表单,其中输入了登录名。当我开始输入时,文本会立即发送到检查登录可用性的服务器。

答案必须是 0 或 1,真或假,取决于我采取进一步的行动。但是 0/false 是默认字段值,它们不会被发送,字段只是保持为空,字段根本不是(当且仅当字段不等于其默认值时,才会在线上发送字段)。

我能用它做什么?我明确需要得到 0 或 1 的答案。当然,我使用的是字符串,但这是错误的。

.proto

message InputChecking {
string login = 1;
int32 loginStatus = 2;
string mail = 3;
int32 mailStatus = 4;
}

message RegistrationRequest {
...
}

message WrapperMessage {
oneof msg {
InputChecking mes_inputChecking = 1;
RegistrationRequest mes_registrationRequest = 2;
}
}

.cpp

WrapperMessage wm; // protobuf message, is filled with data from the server

const google::protobuf::FieldDescriptor* inputCheckingField = wm.GetDescriptor()->FindFieldByName("mes_inputChecking");

if (wm.GetReflection()->HasField(wm, inputCheckingField)) // if inputCheckingField is
{
// It says that such a field is, when he receives a message from the server with loginStatus = 0, but there are no fields

const google::protobuf::FieldDescriptor* loginStatusField = wm.mes_inputchecking().GetDescriptor()->FindFieldByName("loginStatus");

if (wm.mes_inputchecking().GetReflection()->HasField(wm.mes_inputchecking(), loginStatusField))
{
// It is only called when the login is different from 0
Log("Login status = " + wm.mes_inputchecking().loginstatus());
}
}

最佳答案

另一种选择是使用枚举:

enum LoginStatus {
LOGINSTATUS_INVALID = 0,
LOGINSTATUS_NOT_AVAILABLE = 1,
LOGINSTATUS_AVAILABLE = 2
}

这既使代码更具可读性,又允许单独处理第三种状态(响应中缺少字段)。

关于c++ - Protobuf 默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41089035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com