我正在使用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* 将上下文传递到回调中。
我是否遗漏了什么,或者在回调之外访问对象的最佳策略是什么?
我唯一能想到的就是类中的一些静态变量。这对我来说似乎有点“丑陋”。
非常感谢任何提示!