2014-03-05 2 views
0

몇 가지 프로젝트에서 전에는 activemqcpp API를 사용해 보았지만, 어떤 메시지 유형인지 미리 알고 있었기 때문에 해당 메시지 하위 클래스에 대한 동적 캐스팅이 안전했습니다.ActiveMQCPP - Meesage 유형 확인

지금 MQ 라이브러리에 대한 래퍼를 작성 중이므로 수신 메시지에서 반환 된 기본 메시지 포인터를 인식 할 수있는 방법을 찾을 수 없습니다.

답변

1

순수한 C++ 방식으로 작업하려면 C++ RTTI의 typeid 연산자를 사용하여 객체를 검사하여 그 객체를 확인하십시오. 이 클래스는 방법에게은 OpenWire에 사용되는 할당 된 ID를 통해 유형을 반환 getDataStructureType() 방법을 제공합니다

activemq::core::commands::Message 

:

간단한 방법은 모든 CMS 메시지 인스턴스에서 파생 된 기본 메시지 형식으로 캐스팅하는 것입니다 프로토콜 :

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; 

또는 결과가 null이 아닌 경우에만 동적 유형 변환을 시도 할 수 있습니다.

+0

activemq-cpp 문서에서 cms :: message의 계층 구조 트리에 나타나지 않기 때문에 activemq :: core에 대한 형 변환이 가능하다는 것을 알고 있었기 때문에 dynamic_cast 접근법을 사용하고있었습니다. – Nare