从C回调中访问C ++对象

时间:2016-01-04 21:21:33

标签: c++ c callback mqtt mbed

我正在使用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 *来将上下文传递给回调。

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

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

非常感谢任何提示!

0 个答案:

没有答案