Схема плоских буферов: векторы союзов невозможны с --binary - PullRequest
0 голосов
/ 07 ноября 2019

Я получаю эту ошибку, когда пытаюсь использовать векторы союзов и генерировать двоичные файлы формата проводника (--binary)

flatc.exe --cpp --java --js --csharp --binary c.fbs
error: D:\FlatbuffersVectorOfUnions\c.fbs(13, 9): error: Vectors of unions are not yet supported in all the specified programming languages.

Без --binary-switch flatc.exe не жалуется:

flatc.exe --cpp --java --js --csharp c.fbs

Действительно ли невозможно использовать векторы объединений при генерации двоичных файлов форматов проводов? Я думал, что это двоичная сериализация текстовой схемы и должен поддерживать все, что возможно с файлами .fbs.

Мне было любопытно и изменил Parser :: SupportsVectorOfUnions () в idl_parser.cpp (| IDLOptions ::kBinary) и, кажется, работает.

bool Parser::SupportsVectorOfUnions() const {
  return opts.lang_to_generate != 0 &&
         (opts.lang_to_generate & ~(IDLOptions::kCpp | IDLOptions::kJs |
                                    IDLOptions::kTs | IDLOptions::kPhp |
                                    IDLOptions::kJava | IDLOptions::kCSharp | IDLOptions::kBinary)) == 0;
}

Это c.fbs

table A {
}

table B {
}

union U {
    A,
    B
}

table C {
    v : [U];
}

root_type C;

1 Ответ

1 голос
/ 09 ноября 2019

Это уже исправлено в основной ветке. Parser :: SupportsAdvancedUnionFeatures () в текущей версии idl_parser.cpp поддерживает kBinary:

bool Parser::SupportsAdvancedUnionFeatures() const {   return opts.lang_to_generate != 0 &&
         (opts.lang_to_generate &
          ~(IDLOptions::kCpp | IDLOptions::kJs | IDLOptions::kTs |
            IDLOptions::kPhp | IDLOptions::kJava | IDLOptions::kCSharp |
            IDLOptions::kKotlin | IDLOptions::kBinary)) == 0; }
...