Я увидел следующее функция в файле отражения.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, но это возвращает 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