代码之家  ›  专栏  ›  技术社区  ›  Coco

C++传递类方法作为参数

  •  0
  • Coco  · 技术社区  · 7 年前

    我目前正在做以下工作:

    m_pubSubClient.setCallback( std::bind(&CL::callbackHandler, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
    

    但似乎PubSubClient库的作者已经更改了签名。

    // old
    #define MQTT_CALLBACK_SIGNATURE std::function<void(char*, uint8_t*, unsigned int)> callback
    //new 
    #define MQTT_CALLBACK_SIGNATURE void (*callback)(char*, uint8_t*, unsigned int)
    

    1 回复  |  直到 7 年前
        1
  •  2
  •   Jodocus    7 年前

    由于普通函数指针不能绑定到成员函数,因此基本上只剩下三个选择:可以将CL::callbackHandler声明为静态成员函数,使其成为自由函数或使用lambda表达式(不带闭包),如

    m_pubSubClient.setCallback([](char* param1, uint8_t* param2, unsigned int param3) {
        // handling the event
    });