0

我正在使用mbed framework为嵌入式平台 (ARM CORTEX4) 编写 C++ 应用程序。我正在使用新的 Paho Embedded C++/C 客户端库。这是图书馆的代码。一切都按预期工作,除了订阅回调。

这是 subscribe 方法的定义:

 /** 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 为:

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++ 编写的,因此我找不到将上下文变量传递给回调的方法。所以目前看不到从回调中访问我的对象的方法。

我在不同 MQTT 客户端(用于 Unix / Mac / Windows 的 Paho MQTT C 客户端)的 API 中看到,它接受例如 void* 将上下文传递到回调中。

我是否遗漏了什么,或者在回调之外访问对象的最佳策略是什么?

我唯一能想到的就是类中的一些静态变量。这对我来说似乎有点“丑陋”。

非常感谢任何提示!

4

0 回答 0