siv*_*udh 10 c++ protocol-buffers
我应该如何添加Protobuf消息的方法?
假设我在.proto文件中:
package proto;
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
Run Code Online (Sandbox Code Playgroud)
我想concatenateNameEmail()在消息中添加一个方法,比如字符串.
我现在做的是我创建自己的C++类,如下所示:
class Person : public proto::Person
{
public:
Person( proto::Person const & person_ )
: proto::Person(person_)
{}
string concateNateNameEmail()
{
...
}
};
Run Code Online (Sandbox Code Playgroud)
所以缺点是我需要调用proto :: Person复制构造函数.有比这更优雅的解决方案吗?
DS.*_*DS. 14
Google Protobufs特别不打算扩展.以下是文档中的段落(在此中间:http://code.google.com/apis/protocolbuffers/docs/cpptutorial.html):
协议缓冲区和OO设计协议缓冲区类基本上是哑数据持有者(如C++中的结构); 他们没有在对象模型中成为优秀的一等公民.如果要为生成的类添加更丰富的行为,最好的方法是将生成的协议缓冲区类包装在特定于应用程序的类中.... 永远不要通过继承它们来为生成的类添加行为.这将打破内部机制,无论如何都不是良好的面向对象的实践.
如果你只想要一个方法,我可以看到这样的建议看起来很烦人,但总的来说这是一个很好的建议.如果您确实没有其他功能可以保证创建特定于应用程序的"Person"类,那么定义顶级函数没有任何问题:
string concatenateNameEmail(const proto::Person &person) { ... }
Run Code Online (Sandbox Code Playgroud)