如何重命名 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 种方法可以做到这一点:
从A
到B
逐字段复制:a.err_code = b.err_code; *(a.mutable_err_msg()) = b.err_msg();
代码很乏味。
使用反射在循环中复制字段,而无需将一个字段显式分配给另一个字段。你需要学习反射机制。
可以将A
序列化为字符串,反序列化为B
。可能效率不是很高
A a;
std::string s;
a.SerializeToString(&s);
B b;
b.ParseFromString(s);
我定义了以下 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 种方法可以做到这一点:
从
A
到B
逐字段复制:a.err_code = b.err_code; *(a.mutable_err_msg()) = b.err_msg();
代码很乏味。使用反射在循环中复制字段,而无需将一个字段显式分配给另一个字段。你需要学习反射机制。
可以将
A
序列化为字符串,反序列化为B
。可能效率不是很高
A a;
std::string s;
a.SerializeToString(&s);
B b;
b.ParseFromString(s);