Могу ли я вызвать CreateString встроенным при создании таблицы?

Предполагая следующую таблицу в плоских буферах:

table Person {
  id:int32
  name:string;
  age:int16;
  location:string;
}

Тогда в коде С++ оба эти подхода верны?

//Calling CreateString inline
auto person = CreatePerson(builder,
                           10,
                           builder.CreateString(name),
                           25,
                           builder.CreateString("New York"));

против

auto name = builder.CreateString("John");
auto loc = builder.CreateString("New York");

auto person = CreatePerson(builder, 10, name, 25, loc);

Причина, по которой я спрашиваю, заключается в том, что мы должны создать все смещения перед созданием таблицы, но в документации четко не указано, приемлем ли встроенный вызов CreateString?

🤔 А знаете ли вы, что...
C++ позволяет создавать пользовательские типы данных с использованием классов и структур.


50
1

Ответ:

Решено

Оба кода действительны. Порядок вычисления аргументов неважен. builder просто сериализует отдельные значения в свободных местах массива байтов. CreatePerson(builder, 10, name, 25, loc) копирует сериализованные данные из builder.