我正在使用mbed framework为嵌入式平台(ARM CORTEX4)编写C ++应用程序。 I'm using the new Paho Embedded C++/C client图书馆。 Here is the library's code。除了订阅回调之外,一切都按预期工作。
这是订阅方法的定义:
/** MQTT Subscribe - send an MQTT subscribe packet and wait for the suback
* @param topicFilter - a topic pattern which can include wildcards
* @param qos - the MQTT QoS to subscribe at
* @param mh - the callback function to be invoked when a message is received for this subscription
* @return success code -
*/
int subscribe(const char* topicFilter, enum QoS qos, messageHandler mh);
将messageHandler定义为:
typedef void (*messageHandler)(MessageData&);
和MessageData as:
struct MessageData
{
MessageData(MQTTString &aTopicName, struct Message &aMessage) : message(aMessage), topicName(aTopicName)
{ }
struct Message &message;
MQTTString &topicName;
};
和消息为:
struct Message
{
enum QoS qos;
bool retained;
bool dup;
unsigned short id;
void *payload;
size_t payloadlen;
};
由于我的软件是用C ++编写的,我找不到将上下文变量传递给回调的方法。因此,目前看不到从回调中访问我的对象的方法。
我在API中看到了一个不同的MQTT客户端(Paho MQTT C Client for Unix / Mac / Windows),它接受了一个void *来将上下文传递给回调。
我是否遗漏了某些内容或者在回调之外访问对象的最佳策略是什么?
我唯一能想到的是,类中的一些静态变量。这似乎对我来说有点“难看”。
非常感谢任何提示!