Вызов внешней функции из функции класса
Я постараюсь объяснить свою потребность:
- У меня есть созданная мной универсальная библиотека под названием
myIOT.h
. - Этот класс имеет предварительно настроенные настройки MQTT и Wi-Fi.
- Внутри этой библиотеки есть функция
mqtt_callback
для всех общих команд, таких какboot_time
иconnection_status
. - НО, эта библиотека используется в коде нескольких моих устройств iot, каждое из которых имеет еще несколько команд mqtt, адаптированных только для конкретного устройства, и я ищу способ, которым
iot.mqtt_callback(ext_mqtt_func )
получит в качестве параметра локальный объект (который принадлежит скетчу, а не библиотеке), который будет содержать необходимый дополнительный код.
Попробую объяснить более понятно:
void myIOT::mqtt_callback(ext_mqtt_func){
if (a == true ) {
do something
};
else {
ext_mqtt_func()); // вызов другой функции, принадлежащей скетчу, а не библиотеке
}
@Guy . D, 👍0
Обсуждение1 ответ
Лучший ответ:
▲ 1
Да, вы можете это сделать.
Вы передаете указатель функции в качестве параметра функции.
См. этот вопрос о stackoverflow:
https://stackoverflow.com/questions/2582161/c-function-pointer-as -параметр
,
@leoc7
спасибо, отлично работает. Поскольку ему нужна строка с использованием MQTT, этот ext_fuct также должен передать эту строку - и объяснение выше относится к функции без аргументов, поэтому я обновил ее до typedef void (*cb_func)(char msg1[ 50])
, который передает свою строку (и это отлично работает), но я бы предпочел передать его как указатель на эту строку (что не удается), @Guy . D
Смотрите также:
- Как получить исходные файлы для библиотек Arduino?
- Ошибка: "недопустимое использование нестатической функции-члена" при вызове функции из моего собственного класса-метода
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Существуют ли библиотеки сглаживания сигналов для Arduino?
- Wire.h не найден!
- Библиотека FastLED: Как настроить яркость одного пикселя в абсолютном масштабе?
- Как эта строка кода определяет, подключен ли последовательный интерфейс?
- Ошибка Specified folder/zip file does not contain a valid library
Обратите внимание, что лучше использовать if (a), чем сравнивать логическое значение с истиной или ложью. Если вы назовете лучшее, чтобы было ясно, что это логическое значение, его лучше поддерживать., @Michel Keijzers
@MichelKeijzers это функция сравнения строк для установки команды MQTT, @Guy . D