Я пытаюсь скопировать байты в вызов функции GRPC из protobuf в C ++, и все время получаю сообщение об ошибке.
message Foo {
int32 value=1;
bytes data=2;
}
В некотором базовом коде я создаю Foo как переменную-член,затем возвращаем Foo.
Foo SomeClass::DoSomething() {
Foo fooTemp;
fooTemp.set_value(5);
fooTemp.set_data("Blah");
return fooTemp;
}
Затем в моем коде GRPC я получаю:
// rpc DoFoo(Params) returns (Foo){}
Status Server::CaptureImage( ServerContext* context, const Params* call, Foo* retVal ) {
retVal->CopyFrom( SomeClass.DoSomething());
return Status::OK;
}
Я получаю неопределенные ошибки на стороне клиента GRPC.Разве CopyFrom не копирует байты, лежащие в основе?Нужно ли мне навязывать им глубокую копию?Я просто пропускаю функцию, которая должна работать?
Если я изменю свой GRPC-сервер для непосредственной установки данных, то ошибка клиента исчезнет, и я получу значения.
// rpc DoFoo(Params) returns (Foo){}
Status Server::CaptureImage( ServerContext* context, const Params* call, Foo* retVal ) {
retVal->CopyFrom( SomeClass.DoSomething());
retVal->set_data("Blah")
return Status::OK;
}
Это возвращается клиенту в порядке с Blah и 5.У кого-нибудь есть хороший пример кода, как копировать protobuf друг в друга?