【问题标题】:Making a Wrapper class for ActiveMQ为 ActiveMQ 创建一个 Wrapper 类
【发布时间】:2011-12-29 02:48:59
【问题描述】:

我想为 ActiveMQ 创建一个 Wrapper 类,它只有发送和获取功能。我想将它们包装在一个静态类中。用户可以使用这个客户端向activemq实例发送、获取消息。

我希望这个过程是透明的。 this link中有两个类

我唯一的障碍是,我需要在 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;

和头文件,我收到几条错误消息,抱怨路径。

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

有没有我可以查看的代码示例来解决这个问题?基本我只想使用这个producerconsumer 的功能。

编辑:我知道 C++ 中没有静态类之类的东西。 This 是我的参考。

【问题讨论】:

  • C++ 中没有“静态类”这样的东西。
  • 这是我的参考。 stackoverflow.com/questions/9321/…
  • 嗯,这只是一个同样困惑的人提出的问题;我不确定这是否构成“参考”:-)(特别是考虑到另一个答案说 C++ 中没有“静态类”!)
  • @KerrekSB 你没有建设性。你能别管它吗?如果你想对你有帮助,你可以评论这个问题,拜托!!我不需要这样的另一个论点,可以是参考还是不等。拜托!!!
  • 对,但如果你想让人们有机会帮助你,你真的需要用实际错误消息 i>.

标签: c++ static activemq factory


【解决方案1】:

首先,C++ 中没有“静态类”之类的东西。所以第一个要求是毫无意义的胡言乱语。 namespace 可能是您要查找的内容:您可以将 set()get() 放在 wrapper 命名空间中。

也就是说,你的“地狱般的崩溃”问题可以通过放置......来解决。

#pragma once

在头文件的顶部。

请注意,这只是您想要使用的所有编译器都支持的事实上的标准。毫无疑问,其他人会尝试解释如何使用所谓的标头保护在标准语言中做同样的更复杂和更容易出错的事情。不过试试看。

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

【讨论】:

  • 使用标题保护来代替编译指示几乎不是什么危险的东西。
  • @Maxpm 螺丝头护罩,螺丝#pragma once。给我模块。
【解决方案2】:

首先,让我们考虑一下static class 在支持它的语言中的含义。据说类没有面向对象的价值,而且它的存在只是为了组织。

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

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

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

我对 ActiveMQ 一无所知,所以恐怕无法帮助解决实施问题。

至于路径错误,如果不实际看到它们是很难判断的。我猜你的编译器选项设置不正确,或者as Alf P. Steinbach suggests,你的头文件被包含了不止一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 2020-04-13
    • 1970-01-01
    相关资源
    最近更新 更多