为ActiveMQ制作一个包装器类

Making a Wrapper class for ActiveMQ

本文关键字:一个 包装 ActiveMQ      更新时间:2023-10-16

我想为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文件中添加以下内容时,麻烦就大了。你认为我应该把这个隐含分离到一个工厂,初始化和实例,然后返回到上面的包装器吗?我如何处理所有的依赖关系?

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

和头文件,我得到几个消息作为错误,它抱怨路径。

我怎样才能得到这个正确的?我最终想要构建一个Factory,获取一个实例并向队列发送或获取消息。

是否有一个代码示例,我可以查看一下,使其正确?我只想使用这个生产者和消费者的功能。

编辑:我知道在c++中没有静态类这样的东西。这是我的推荐信。

首先,c++中没有所谓的"静态类"。所以第一个要求是毫无意义的废话。名称空间可能是您正在寻找的:您可以将set()get()放在wrapper名称空间中。

也就是说,你的"all hell breaks loose"问题可以通过放置& help;

#pragma once

放在头文件的顶部。

请注意,这只是您想要使用的所有编译器所支持的事实上的标准。毫无疑问,其他人会试图解释如何在标准语言中使用所谓的头守卫来完成同样更复杂和更容易出错的工作。试试吧。

另外,永远不要将using namespace std;放在头文件的全局命名空间中。using namespace只是拉入整个名称空间,甚至包括您不使用的部分。当人们#include你的标题时,他们不会期望得到那么多的膨胀。

首先,让我们考虑static class在支持它的语言中意味着什么。它说类没有面向对象的值,它存在只是为了组织。

因为c++不必把所有东西都硬塞进OO范式,所以它提供了适当的结构来表达这一点:名称空间。名称空间的行为就像其他语言中的静态类一样。它包含许多函数、变量甚至类。然后,我要做的是get()send()函数放在命名空间中。

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

我对ActiveMQ一无所知,所以我恐怕不能在实现问题上提供帮助。

至于路径误差,如果没有实际看到,很难判断。我猜你的编译器选项设置不正确,或者,正如Alf p . Steinbach所建议的,你的头文件被包含了不止一次。