Создание класса Wrapper для ActiveMQ - PullRequest
0 голосов
/ 15 ноября 2011

Я хочу создать класс Wrapper для ActiveMQ, который будет иметь только функции отправки и получения.Я хочу обернуть их в статический класс.Пользователи могут использовать этот клиент и отправлять, получать сообщения в экземпляр activemq.

Я хочу, чтобы этот процесс был прозрачным.В есть две классы * эта ссылка

Мой единственный недостаток в том, что мне нужно это на c ++ и я не уверен, с чего начать.Я не использовал c ++ целую вечность, и теперь не знаю, как мне создать этот класс-обертку.

Я пытаюсь сделать это следующим образом:

// .h file
#include <stdlib.h>
#include <iostream>

using namespace std;

class ActiveMQWrapper
{
        public:
                static void send(std::string message);
                static std::string get();

};

// .cpp file
#include<string>
#include<iostream>

#include "ActiveMQWrapper.h"

void ActiveMQWrapper::send(std::string message){
        std::cout<<message;
}

std::string ActiveMQWrapper::get(){
        return "test";
}

// test file
#include <string>
#include <iostream>
#include "ActiveMQWrapper.h"


int main() {
        std::string foo ="test";
        ActiveMQWrapper::send(foo);
        std::cout<<ActiveMQWrapper::get();
        return 1;
}

Когда я добавил следующее в .hфайл, ад вырывается.Как вы думаете, я должен отделить этот impl от фабрики и инициализировать и создать экземпляр и вернуться к оболочке выше?Как мне справиться со всеми зависимостями?

private:

    Connection* connection;
    Session* session;
    Destination* destination;
    MessageProducer* producer;
    int numMessages;
    bool useTopic;
    bool sessionTransacted;
    std::string brokerURI;

и файлами заголовков, я получаю несколько сообщений в виде ошибок, которые жалуются на путь.

Как я могу получить это правильно?В конце концов я хочу построить Фабрику, получить экземпляр и отправить или получить сообщения в очередь.

Есть ли пример кода, который я могу изучить, чтобы понять это правильно?Я хочу использовать функциональность только этого производителя и потребителя .

Редактировать: я понимаю, что в C ++ нет такого понятия, как статический класс. Это мой справочник.

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Во-первых, в C ++ не существует такого понятия, как «статический класс». Таким образом, первое требование - бессмысленный слон. пространство имен , вероятно, то, что вы ищете: вы можете поместить set() и get() в wrapper пространство имен.

Тем не менее, ваши проблемы с "всеми адскими ударами" могут быть решены путем размещения & hellip;

#pragma once

вверху вашего заголовочного файла.

Обратите внимание, что это стандарт де-факто, поддерживаемый всеми компиляторами, которые вы когда-либо захотите использовать. Без сомнения, другие попытаются объяснить, как вы можете сделать то же самое более сложное и подверженное ошибкам в стандартном языке, используя так называемые средства защиты заголовков. Но попробуйте.

Кроме того, никогда не помещайте using namespace std; в глобальное пространство имен в заголовочном файле. using namespace просто вытягивает все пространство имен, даже те части, которые вы не используете. Когда люди #include ваш заголовок, они не ожидают, что они будут так много раздувать.

1 голос
/ 15 ноября 2011

Сначала давайте рассмотрим, что означает static class в языках, которые его поддерживают.Говорят, что класс не имеет объектно-ориентированного значения, и что он существует исключительно для организации.

Поскольку C ++ не должен вводить все вОО парадигма, она обеспечивает правильные конструкции для выражения этого: пространства имен .Пространство имен ведет себя как статический класс в других языках.Он содержит ряд функций, переменных или даже классов.В таком случае я хотел бы, чтобы поместил ваши get() и send() функции в пространство имен.

namespace activeMQWrapper
{
    void send(std::string message)
    {
        // Put your code here.
    }

    std::string get()
    {
        // And here.
    }
}

Я ничего не знаю об ActiveMQ, поэтому ябоюсь, что я не смогу помочь с проблемами реализации.

Что касается ошибок пути, трудно сказать, фактически не видя их.Я предполагаю, что ваши параметры компилятора установлены неправильно, или, , как Альф П. Штейнбах предлагает , ваши заголовки включаются более одного раза.

...