如何重命名 protobuf 消息? typedef 像 C/C++?

How to rename a protobuf msg? typedef like C/C++?

我定义了以下 protobuf 消息 A 和 B:

message A {
    optional int32 err_code = 1;
    optional string err_msg = 2;
}
message B {
    optional int32 err_code = 1;
    optional string err_msg = 2;
}

我可以直接用B作为A的别名吗?

如果我做不到,如何优雅地将A消息实例复制到B消息实例?

期待您的建议。

有 3 种方法可以做到这一点:

  1. AB逐字段复制:a.err_code = b.err_code; *(a.mutable_err_msg()) = b.err_msg();代码很乏味。

  2. 使用反射在循环中复制字段,而无需将一个字段显式分配给另一个字段。你需要学习反射机制。

  3. 可以将A序列化为字符串,反序列化为B。可能效率不是很高

A a;
std::string s;
a.SerializeToString(&s);

B b;
b.ParseFromString(s);