Есть ли разница между вызовами .mutable_mynestedmsg () и .mynestedmsg ()?

Я новичок в Google Probubu и что узнать, есть ли разница между следующими методами:

1)
foo.mutable_bar()->set_somefield(...)

а также

2)
nestedmsg = foo.bar();
nestedmsg.set_somefield() (where bar is message)

?

Как я обнаружил, foo.bar () не работает для меня. Разница в документации заключается в том, что изменяемый вызов возвращает указатель вместо default_instance. Но почему второй способ не работает?

0

Решение

Ваша вторая версия не должна даже компилироваться: bar() возвращает константную ссылку, но set_somefield() это не постоянный метод. Не использовать const_cast обойти это!

Разница между методами заключается в том, что mutable_bar() на самом деле инициализирует bar поле с новым вложенным сообщением, если его еще нет. То есть если has_bar() всегда вернется true после mutable_bar() даже если бы это было false перед рукой. bar(), с другой стороны, никогда не изменяет сообщение, поэтому не влияет has_bar(), Если bar поле не установлено, тогда bar() возвращает ссылку на экземпляр по умолчанию типа, который вы должны никогда изменить — вот почему это const.

Если вам нужно изменить под-сообщение, вы всегда должны использовать mutable_ вариант. Не волнуйтесь, он никогда не возвращает нулевой указатель.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]