protobuf-net是否可以输出.proto文件,用于C++中的代码生成?

dw1jzc5e  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(193)

我试图弄清楚protobuf-net是否能够生成.proto文件,然后可以使用常规的Protobuf编译器来编译C++类。
我看了那些问题

但是它们确实很老了,而且谈论的是V2 Protobuff语法。
我的目标是用C#编写一个类层次结构,然后使用protobuf-net为该层次结构生成.proto文件,然后使用官方的Google编译器基于该层次结构生成C代码。
最终结果应该具有C#和C
之间的字段和数据奇偶校验,以便可以交换消息。
这可能吗?
我试着举个例子。
假设我有下面的C#代码:(可能有一些语法错误,因为我在记事本中快速输入了它)

public class Point{
    public double x;
    public double y;
}

public abstract class Polygon{
    public List<Point> Vertices;

    public Polygon(){
        Vertecies = new();
    }

    public override ToString(){
        string ans = "";
        foreach(var point in Vertecies){
            ans += $"({point.x},{point.y})"
        }
        return ans;
    }
}

public class Square: Polygon{

    public Sqare(Point a, Point b, Point c Point d){
        this.Vertices.Add(a);
        this.Vertices.Add(b);
        this.Vertices.Add(c);
        this.Vertices.Add(d);
    }
}

public class Triangle: Polygon{

    public Triangle(Point a, Point b, Point c){
        this.Vertices.Add(a);
        this.Vertices.Add(b);
        this.Vertices.Add(c);        
    }
}

我想用protobuf-net生成一个.proto文件,用C++生成同样的层次结构。
我的问题是:如果protobuf-net可以做到这一点?如果您认为缺少进一步的信息,请告诉我缺少什么,我将提供它。

gkn4icbw

gkn4icbw1#

是也不是。Protobuf-net同时支持proto 2和proto 3,因此:这很好--而且它通常在GetSchema/GetProto中做得足够好,可以正常工作。但是,我认为您的特定模型的问题是:继承。Protobuf实际上并不执行继承。Protobuf-net可以伪造继承,但在某种程度上与oneof兼容(用.proto术语来说),但是:如果你想要一个能够很好地Map到跨平台使用的模型,你通常需要从.proto支持的简单模型开始,它并不包含这个。
但是:注解模型,并给予它一个旋转!

相关问题