ActiveMQCPP — определение типа сообщения

Ранее я работал с API activemqcpp в нескольких проектах, но я всегда знал, какой тип сообщения, заранее, поэтому динамическое приведение к соответствующему подклассу сообщений было безопасным.

Сейчас я создаю оболочку для библиотеки MQ и не могу найти способ распознать из базового указателя сообщения (возвращаемого при получении), какому подклассу сообщения он соответствует, чтобы привести его соответственно.

0

Решение

Если вы хотите делать вещи чистым способом C ++, вы можете поиграть с использованием оператора typeid из RTTI C ++, чтобы проверить объект, чтобы увидеть, что это такое.

Более простой способ — привести к базовому типу сообщения, из которого получены все экземпляры сообщения CMS:

activemq::core::commands::Message

Этот класс предлагает метод getDataStructureType() методы, которые возвращают тип через назначенный идентификатор, используемый в протоколе OpenWire:

    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;

Или вы можете просто попробовать динамическое приведение к каждому типу, пока результат не станет нулевым.

1

Другие решения

Других решений пока нет …