[mqtt] Replace std::bind with lambdas in CustomMQTTDevice

Replace std::bind calls in subscribe/subscribe_json template methods
with equivalent lambdas. Uses static_cast<T*>(this) instead of
C-style cast for type safety.
This commit is contained in:
J. Nick Koston
2026-03-19 00:36:05 -10:00
parent 403ba262c6
commit f57b604351
+16 -10
View File
@@ -189,28 +189,34 @@ class CustomMQTTDevice {
template<typename T>
void CustomMQTTDevice::subscribe(const std::string &topic,
void (T::*callback)(const std::string &, const std::string &), uint8_t qos) {
auto f = std::bind(callback, (T *) this, std::placeholders::_1, std::placeholders::_2);
global_mqtt_client->subscribe(topic, f, qos);
auto *obj = static_cast<T *>(this);
global_mqtt_client->subscribe(
topic,
[obj, callback](const std::string &topic, const std::string &payload) { (obj->*callback)(topic, payload); }, qos);
}
template<typename T>
void CustomMQTTDevice::subscribe(const std::string &topic, void (T::*callback)(const std::string &), uint8_t qos) {
auto f = std::bind(callback, (T *) this, std::placeholders::_2);
global_mqtt_client->subscribe(topic, f, qos);
auto *obj = static_cast<T *>(this);
global_mqtt_client->subscribe(
topic, [obj, callback](const std::string &, const std::string &payload) { (obj->*callback)(payload); }, qos);
}
template<typename T> void CustomMQTTDevice::subscribe(const std::string &topic, void (T::*callback)(), uint8_t qos) {
auto f = std::bind(callback, (T *) this);
global_mqtt_client->subscribe(topic, f, qos);
auto *obj = static_cast<T *>(this);
global_mqtt_client->subscribe(
topic, [obj, callback](const std::string &, const std::string &) { (obj->*callback)(); }, qos);
}
template<typename T>
void CustomMQTTDevice::subscribe_json(const std::string &topic, void (T::*callback)(const std::string &, JsonObject),
uint8_t qos) {
auto f = std::bind(callback, (T *) this, std::placeholders::_1, std::placeholders::_2);
global_mqtt_client->subscribe_json(topic, f, qos);
auto *obj = static_cast<T *>(this);
global_mqtt_client->subscribe_json(
topic, [obj, callback](const std::string &topic, JsonObject root) { (obj->*callback)(topic, root); }, qos);
}
template<typename T>
void CustomMQTTDevice::subscribe_json(const std::string &topic, void (T::*callback)(JsonObject), uint8_t qos) {
auto f = std::bind(callback, (T *) this, std::placeholders::_2);
global_mqtt_client->subscribe_json(topic, f, qos);
auto *obj = static_cast<T *>(this);
global_mqtt_client->subscribe_json(
topic, [obj, callback](const std::string &, JsonObject root) { (obj->*callback)(root); }, qos);
}
} // namespace esphome::mqtt