flatc (flatbuffer) 编译器没有以正确的方式处理嵌套的命名空间
flatc (flatbuffer) compiler doesnot handle nested namespace in correct manner
我正在向 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" 已经被拉出到全局命名空间
之后 i 运行 flat -cpp test.proto,最终生成不正确的头文件。包含 B
的两个定义
struct B FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table
这似乎是 FlatBuffers 中的一个错误,在生成的代码中它们都在同一个命名空间中。在此处报告错误:https://github.com/google/flatbuffers/issues
同时,手动取消嵌套 .proto,它应该可以工作。
编辑:这是最近修复的:https://github.com/google/flatbuffers/commit/20c0082ee5bfeeecaa443c001a89934e9448ffa4
我正在向 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" 已经被拉出到全局命名空间 之后 i 运行 flat -cpp test.proto,最终生成不正确的头文件。包含 B
的两个定义 struct B FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table
这似乎是 FlatBuffers 中的一个错误,在生成的代码中它们都在同一个命名空间中。在此处报告错误:https://github.com/google/flatbuffers/issues
同时,手动取消嵌套 .proto,它应该可以工作。
编辑:这是最近修复的:https://github.com/google/flatbuffers/commit/20c0082ee5bfeeecaa443c001a89934e9448ffa4