有没有办法转发声明表以删除flatbuffer模式中的循环依赖?

时间:2017-11-29 19:22:19

标签: serialization protocol-buffers idl flatbuffers

我不明白如何在flat buffer schema中使用forward_declare表。

//在c1.fbs

include "c2.fbs"
table C1
{
    c2 : C2;
}

//在c2.fbs

include "c1.fbs"
table C2
{
   c1: C1;
}

问题:

  1. 上面的模式使用flatc(1.8.0)进行精确编译,但会在生成的cpp标头中导致循环依赖!不应该flatc抱怨吗?
  2. 如何在c1.fbs中转发声明C2,并删除呼叫:include“c2.fbs”
  3. PS: 更具体地说,我偶然发现了这个问题,试图模仿fbs架构中的类结构。

    union Cs {C2, C3};
    class C1
    {
        Cs x;
    }
    
    class C2 : public C1
    {
        List <C1> y;
    }
    
    class C3 : public C1
    {
    }
    

    请帮忙。

1 个答案:

答案 0 :(得分:0)

FlatBuffers模式语言中没有前向声明语句,FlatBuffers自动支持循环。您所看到的必须是C ++生成器中的一个错误(不确定为什么,因为它预先声明了所有内容),所以请在FlatBuffers github站点上提交一个问题。

解决方法可能是暂时将它们放在一个文件中。