paho mqtt callback function with c 如何减少else if 的个数?

How to reduce the number of else if in paho mqtt callback function with c?

我正在使用PAHO mqtt asynchronous function订阅主题,但是我发现了一个问题。我在回调函数messageArrived中接收并解析主题时,需要写很多else if来判断是否是对应的主题。如果是的话,我订阅了很多话题,那么else if之后写的话题实施起来会比较慢,因为需要一一比较。而且因为topicname是char类型,所以不能用switch... Case...,你有什么好主意

rc = MQTTAsync_setCallbacks(MqttClient, (VOID*)MqttClient, connlost, messageArrived, 
deliveryComplete);
...
INT32 messageArrived(VOID *context, CHAR *topicName, INT32 topicLen, MQTTAsync_message *message)
{
    if (strcmp(topicName, TOPIC1) == 0)
    {
     //do something
    }
    else if (strcmp(topicName, TOPIC2) == 0)
    {
     //do something
    }
    ...
    // many 'else if'
    ...
    else if (strcmp(topicName, TOPICn) == 0)
    {
     //do something
    }
}

如果您有大量可能的字符串需要检查,您需要更改整个算法才能使其变得更有效率。有两种常见的方法可以有效地实现这一点:

  • 通过排序的 table 常量字符串,您可以对其进行二进制搜索,或者
  • 作为字符串的散列table

对于一定数量的字符串,二分查找将优于哈希 table,之后哈希 table 将变得更有效。