LINUX.ORG.RU

protobuf в set_allocated как правильно передать готовый объект

 ,


0

1

в протобуферной структуре Foo имеется поле-структура bar типа Bar с repeated полем, и, возможно поэтому для установки этого поля bar протобуф предлагает только метод set_allocated_bar(), который требует указатель на структуру Bar. Метода set_bar() просто нет.

Как выделить память для bar_ и скопировать все из bar не распаковывая bar:

void myfunct(const myproto::Bar & bar) {
  myproto::Foo foo;

  myproto::Bar * bar_;  
  // выделить память как?
  bar_ = … // скопировать все из bar как?
  foo.set_allocated_bar(bar_);
  
  
}

P.S. а как вы работаете с repited полями? может я не правильно понял протобуф.

в итоге сделал так, хз верно или нет, но работает

myproto::Bar * bar_ = new myproto::Bar(bar);
uniqsmart
() автор топика

С protobuf не работал, но разве нельзя просто взять указатель на bar?

void myfunct(const myproto::Bar & bar) {
  myproto::Foo foo;
  foo.set_allocated_bar(&bar);
}

Не забудь отслеживать время жизни bar, чтобы не получить проблемы с висячим указателем.

Siborgium ★★★★★
()
Последнее исправление: Siborgium (всего исправлений: 1)

Надо bar_ создать при помощи new. Потом делаешь с ним что хочешь, потом добавляешь как AddAllocated. Или вызываешь Add и протобуф делает для тебя new внутри.

vromanov ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.