C++ ActiveMQCPP-标识Meesage类型

C++ ActiveMQCPP-标识Meesage类型,c++,activemq-cpp,C++,Activemq Cpp,我以前在一些项目中使用过activemqcpp API,但我总是事先知道消息的类型,因此对相应消息子类的动态强制转换是安全的 现在我正在为MQ库构建一个包装器,但找不到从基本消息指针(由接收返回)进行识别的方法与它相应的消息子类是什么。它是.c/p>< p>如果你想做纯C++的方式,那么你可以使用C++ RTTI中的Type ID操作符来检查对象,看看它是什么。p> 一种更简单的方法是转换为所有CMS消息实例派生自的底层消息类型: activemq::core::commands::Messag

我以前在一些项目中使用过activemqcpp API,但我总是事先知道消息的类型,因此对相应消息子类的动态强制转换是安全的


现在我正在为MQ库构建一个包装器,但找不到从基本消息指针(由接收返回)进行识别的方法与它相应的消息子类是什么。它是.c/p>< p>如果你想做纯C++的方式,那么你可以使用C++ RTTI中的Type ID操作符来检查对象,看看它是什么。p> 一种更简单的方法是转换为所有CMS消息实例派生自的底层消息类型:

activemq::core::commands::Message
此类提供了一个方法
getDataStructureType()
方法,该方法通过OpenWire协议中使用的指定ID返回类型:

    const unsigned char ID_ACTIVEMQBLOBMESSAGE = 29;
    const unsigned char ID_ACTIVEMQBYTESMESSAGE = 24;
    const unsigned char ID_ACTIVEMQMAPMESSAGE = 25;
    const unsigned char ID_ACTIVEMQMESSAGE = 23;
    const unsigned char ID_ACTIVEMQOBJECTMESSAGE = 26;
    const unsigned char ID_ACTIVEMQSTREAMMESSAGE = 27;
    const unsigned char ID_ACTIVEMQTEXTMESSAGE = 28;

或者您可以尝试对每种类型进行动态强制转换,直到结果为非空。

我使用的是动态强制转换方法,考虑到activemq cpp文档,我不知道对activemq::core的强制转换是可行的,因为它没有出现在cms::message的层次结构树中。这非常令人失望。Type或动态Casic是非常“笨重”的,不是“纯C++方式”。相反,它们基本上是C++中编写java的一种形式。Tibco CMS的C API提供了tibems_GetBodyType()调用,该调用返回一个枚举值。简单、干净、轻便。太糟糕了,我们不能在这里使用它。如果源代码可以免费提供给某人修改以满足他们的需要……我才刚刚开始研究activemq cpp。这是在考虑基于Tibco EMS的应用程序端口代码时首先出现的问题之一。因此令人失望的是,考虑到activemq cpp已经存在了多长时间,似乎在其他方面,这种明显有用的东西永远不会出现在“官方”API中。