Я проверяю Flatbuffers для реализации протокола связи. Когда сообщение получено, в моем случае оно может содержать несколько разных таблиц. Если я правильно понимаю, способ достичь этого в Flatbuffers — это использовать «корневую» таблицу, в которой каждая объединенная таблица может быть разной.
В моем случае я уже знаю входящий тип (тип является частью заголовка) => Мне не обязательно иметь возможность размещать каждый тип внутри одной таблицы. Однако представляется невозможным пометить несколько таблиц как «корневые» типы. Это означает, что если я определил таблицы Foo
а также Bar
что я могу получить только GetFoo()
или GetBar()
метод десериализации, но не оба.
Я предполагаю, что было бы также возможно разделить определения по разным файлам схемы, но, поскольку они будут совместно использовать некоторые подклассы, мне также потребуется общий файл схемы для общих определений. Это кажется немного сложнее, чем необходимо для простых случаев.
Есть ли другой способ десериализации нескольких разных типов с помощью Flatbuffers?
Да, ты можешь это сделать. Обратите внимание, что сгенерированный GetMyType()
просто коротко для шаблонного GetRootAs<MyType>
который вы можете использовать с любым типом.
Других решений пока нет …