我想为ActiveMQ创建一个Wrapper类,它只有send和get函数。我想将它们包装在一个静态类中。用户可以使用此客户端并发送消息到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;
和头文件,我得到几条消息作为错误,抱怨路径。
我怎样才能弄清楚这个?我最终想要构建一个Factory,获取一个实例并发送消息或将消息发送到队列。
我可以查看一下代码示例吗?我想要使用此producer和consumer的功能。
编辑:我知道C ++中没有静态类。 This是我的参考。
答案 0 :(得分:2)
首先,C ++中没有“静态类”这样的东西。所以第一个要求是毫无意义的mumbo jumbo。您可能正在寻找namespace:您可以将set()
和get()
放在wrapper
命名空间中。
那就是说,你可以通过放置......来解决你的“所有地狱破裂”的问题。
#pragma once
位于头文件的顶部。
请注意,这只是您希望使用的所有编译器支持的事实标准。毫无疑问,其他人将尝试解释如何使用所谓的标题保护在标准语言中执行相同的更复杂和容易出错的操作。但试试吧。
此外,永远不要将using namespace std;
放在头文件的全局命名空间中。 using namespace
只是拉入整个命名空间,甚至是你不使用的部分。当人们#include
你的标题时,他们不会期望得到那么多膨胀。
答案 1 :(得分:1)
首先,让我们考虑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,你的标题被包含多次。