Компилятор flatc (flatbuffer) неправильно обрабатывает вложенное пространство имен
Я предоставляю следующий прото-файл компилятору flatbuffer для создания файла.fbs.
Файл: test.proto
message A {
optional int32 afoo = 1;
message B {
optional int32 bfoo_ = 1;
}
optional B bfoo= 2;
}
message C {
optional int32 abar = 1;
message B {
optional int32 bbar_ = 1;
}
optional B bbar = 2;
}
После этого я запустил: flatc --proto test.proto, который сгенерирует файл.fbs
Файл: test.fbs // Сгенерирован из test.proto
namespace ;
table A {
afoo:int;
bfoo:_A.B;
}
namespace _A;
table B {
bfoo_:int;
}
namespace ;
table C {
abar:int;
bbar:_C.B;
}
namespace _C;
table B {
bbar_:int;
}
Следует отметить, что "B" был извлечен в глобальное пространство имен. После этого я запустил flat -cpp test.proto, который в итоге генерирует неправильный заголовочный файл. Содержит два определения B
struct B FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table
1 ответ
Это похоже на ошибку в FlatBuffers, в сгенерированном коде все они находятся в одном пространстве имен. Сообщить об ошибке здесь: https://github.com/google/flatbuffers/issues
Тем временем, раскройте.proto вручную, и он должен работать.
РЕДАКТИРОВАТЬ: Это было недавно исправлено: https://github.com/google/flatbuffers/commit/20c0082ee5bfeeecaa443c001a89934e9448ffa4