Flatc还应生成基于对象的api(C#)时,应为具有结构字段的表生成一个“ Create ...”方法

flatc仅为没有结构成员的表生成静态方法'Create ...',因为必须内联创建结构。

我认为flatc可以生成基于对象的api(--gen-object-api)并使用为对象基础api生成的'... T'类时,可以生成'Create ...'方法(例如Vec3T)作为参数类型。 然后,可以在“ Create ...”方法内部调用结构的静态Pack方法(例如Vec3)以内联方式创建它。 我尝试过了,这就是为TableInFirstNS示例生成的flatc:

public struct TableInFirstNS : IflatbufferObject
{
...
  public static Offset<NamespaceA.TableInFirstNS> CreatetableInFirstNS(flatBufferBuilder builder,Offset<NamespaceA.NamespaceB.TableInnestedNS> foo_tableOffset = default(Offset<NamespaceA.NamespaceB.TableInnestedNS>),NamespaceA.NamespaceB.EnumInnestedNS foo_enum = NamespaceA.NamespaceB.EnumInnestedNS.A,StructInnestedNST foo_struct = null) {
    builder.StartTable(3);
    TableInFirstNS.AddFooStruct(builder,NamespaceA.NamespaceB.StructInnestedNS.Pack(builder,foo_struct));
    TableInFirstNS.AddFooTable(builder,foo_tableOffset);
    TableInFirstNS.AddFooEnum(builder,foo_enum);
    return TableInFirstNS.EndTableInFirstNS(builder);
  }
...
  public static Offset<NamespaceA.TableInFirstNS> Pack(flatBufferBuilder builder,TableInFirstNST _o) {
    if (_o == null) return default(Offset<NamespaceA.TableInFirstNS>);
    var _foo_table = _o.FooTable == null ? default(Offset<NamespaceA.NamespaceB.TableInnestedNS>) : NamespaceA.NamespaceB.TableInnestedNS.Pack(builder,_o.FooTable);
    return CreatetableInFirstNS(
      builder,_foo_table,_o.FooEnum,_o.FooStruct);
  }
};

这是ArrayTable示例的生成代码:

public struct ArrayTable : IflatbufferObject
{
...
  public static Offset<MyGame.Example.ArrayTable> CreateArrayTable(flatBufferBuilder builder,ArrayStructT a = null) {
    builder.StartTable(1);
    ArrayTable.AddA(builder,MyGame.Example.ArrayStruct.Pack(builder,a));
    return ArrayTable.EndArrayTable(builder);
  }
...
  public static Offset<MyGame.Example.ArrayTable> Pack(flatBufferBuilder builder,ArrayTableT _o) {
    if (_o == null) return default(Offset<MyGame.Example.ArrayTable>);
    return CreateArrayTable(
      builder,_o.A);
  }
};

那不是有用的扩展吗?

SSBB999SA 回答:Flatc还应生成基于对象的api(C#)时,应为具有结构字段的表生成一个“ Create ...”方法

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2631706.html

大家都在问