相关疑难解决方法(0)

用协议缓冲区做多态的正确方法是什么?

我正在尝试长期序列化一堆与java中强类层次结构相关的对象,并且由于它们的简单性,性能和易于升级,我想使用协议缓冲区来实现它.但是,它们并没有为多态性提供太多支持.现在,我正在处理它的方式是通过"一条消息来统治它们"的解决方案,它有一个必需的字符串uri字段,允许我通过反射实例化正确的类型,然后是一堆可选字段,用于所有我可以序列化的其他可能的类,只使用其中一个(基于uri字段的值).有没有更好的方法来处理多态,或者这是否会像我将得到的那样好?

protocol-buffers

52
推荐指数
4
解决办法
4万
查看次数

协议缓冲区多态

我有一个C ++程序,可以将各种事件(例如StatusEventDetectionEvent具有不同的原型消息定义)发送到消息服务(当前为Active MQ,通过activemq-cpp APU)。我想编写一个消息侦听器,以接收这些消息,解析它们并将它们写入cout,以进行调试。侦听器具有status_event_pb.hdetection_event_pb.h链接。

我的问题是:如何在不知道事件类型的情况下解析它?我想做类似的事情(用伪代码)

receive event
type = parseEventType(event);
if( type == events::StatusEventType) { 
    events::StatusEvent se = parseEvent(event);
    // do stuff with se
}
else {
    // handle the case when the event is a DetectionEvent
}
Run Code Online (Sandbox Code Playgroud)

我看了这个问题,但是不确定扩展是否是正确的选择。简短的代码片段将为您提供帮助。关于protobuf的例子非常罕见!

谢谢!


似乎扩展确实是可行的方法,但是我还有最后一点要解决。这是我到目前为止的原型定义:

// A general event, can be thought as base Event class for other event types.
message Event {
    required int64 task_id = 1;     
    required string module_name = 2;    // …
Run Code Online (Sandbox Code Playgroud)

c++ protocol-buffers

5
推荐指数
1
解决办法
3112
查看次数

标签 统计

protocol-buffers ×2

c++ ×1