Вызов внешней функции из функции класса

Я постараюсь объяснить свою потребность:

  1. У меня есть созданная мной универсальная библиотека под названием myIOT.h.
  2. Этот класс имеет предварительно настроенные настройки MQTT и Wi-Fi.
  3. Внутри этой библиотеки есть функция mqtt_callback для всех общих команд, таких как boot_time и connection_status.
  4. НО, эта библиотека используется в коде нескольких моих устройств iot, каждое из которых имеет еще несколько команд mqtt, адаптированных только для конкретного устройства, и я ищу способ, которым iot.mqtt_callback(ext_mqtt_func ) получит в качестве параметра локальный объект (который принадлежит скетчу, а не библиотеке), который будет содержать необходимый дополнительный код.

Попробую объяснить более понятно:

void myIOT::mqtt_callback(ext_mqtt_func){
if (a == true ) {
do something

};

else {

ext_mqtt_func()); // вызов другой функции, принадлежащей скетчу, а не библиотеке

}

, 👍0

Обсуждение

Обратите внимание, что лучше использовать if (a), чем сравнивать логическое значение с истиной или ложью. Если вы назовете лучшее, чтобы было ясно, что это логическое значение, его лучше поддерживать., @Michel Keijzers

@MichelKeijzers это функция сравнения строк для установки команды MQTT, @Guy . D


1 ответ


Лучший ответ:

1

Да, вы можете это сделать.

Вы передаете указатель функции в качестве параметра функции.

См. этот вопрос о stackoverflow:

https://stackoverflow.com/questions/2582161/c-function-pointer-as -параметр

,

спасибо, отлично работает. Поскольку ему нужна строка с использованием MQTT, этот ext_fuct также должен передать эту строку - и объяснение выше относится к функции без аргументов, поэтому я обновил ее до typedef void (*cb_func)(char msg1[ 50]), который передает свою строку (и это отлично работает), но я бы предпочел передать его как указатель на эту строку (что не удается), @Guy . D