Как правильно установить значение поля в структуре в сообщении Flatbuffers посредством отражения?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно установить значение поля в структуре в сообщении Flatbuffers посредством отражения?

Сообщение Anonymous »

Я не нашел много информации о том, как (правильно) установить поле из структуры внутри сообщения Flatbuffers с использованием функции отражения.
Я увидел следующее функция в файле отражения.h:

Код: Выделить всё

// Set any struct field as a 64bit int, regardless of type what it is.
inline void SetAnyFieldI(Struct *st, const reflection::Field &field,
int64_t val)
Это принимает в качестве аргумента Struct *.
Есть функция, которую вы можете использовать для получения поля Struct, но это возвращает const Struct*, поэтому я не могу использовать его в сочетании с функцией выше:

Код: Выделить всё

// Get a field, if you know it's a struct.
inline const Struct *GetFieldStruct(const Table &table,
const reflection::Field &field)
Затем я увидел, что есть еще следующая функция:

Код: Выделить всё

template
T *GetAnyFieldAddressOf(const Table &table, const reflection::Field &field) {
return reinterpret_cast(table.GetAddressOf(field.offset()));
}
но поскольку в качестве аргумента он принимает константы, он также должен возвращать константную структуру*, чтобы не получить ошибку компиляции.
Я могу выполнить приведение самостоятельно, чтобы получить неконстантную структуру, следующим образом:

Код: Выделить всё

// bufFb is the buffer containing the message
flatbuffers::Table* fbRoot = flatbuffers::GetAnyRoot(bufFb);
const reflection::Field* fbFieldContent = fbSchemaRoot->fields()->LookupByKey("content");
flatbuffers::Struct* structContent = reinterpret_cast((*fbRoot).GetAddressOf((*fbFieldContent).offset()));
Однако мне интересно, стоит ли мне действительно это делать, поскольку все внутренние функции указывают на то, что, возможно, вам не следует возвращать неконстантную структуру и, следовательно, вы, возможно, не должны возвращать неконстантную структуру. не следует устанавливать поля структуры.
Это так или можно использовать последний фрагмент кода? Какие при этом есть предостережения? (При условии, что вы позаботились о правильной настройке внутренних полей структуры.)
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/786 ... latbuffers
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»