Как изменить область действия объекта?
Я использую пример File/Examples/Adafruit MQTT Library/mqtt_ESP8266 в качестве модели для своего кода. В примере объект mqtt создается как глобальная переменная, и все работает нормально. Однако мне нужно создать объект mqtt в setup(), потому что до этого параметры конструктора неизвестны. Если я перенесу вызов конструктора
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
из глобального пространства имен внутрь setup(), я больше не вижу его внутри loop().
Я попытался объявить указатель на mqtt в глобальном пространстве имен, но не знаю, как изменить его, чтобы он указывал на объект mqtt, созданный в setup(). Как мне это сделать?
Дэвид
@David, 👍1
1 ответ
▲ 1
В общем, есть несколько способов сделать это, ни один из них не является идеальным...
- указать на mqtt в глобальном масштабе
Adafruit_MQTT_Client * mqtt_ptr;
и инициализировать его с помощьюmqtt_ptr = new Adafruit_MQTT_Client(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
в настраивать. Затем вам нужно использовать оператор стрелки вместо точки для доступа к его методам. Или вы можете создать псевдоним в цикле (или всякий раз, когда вам это нужно) с помощьюAdafruit_MQTT_Client& mqtt = *mqtt_ptr;
и получить к нему доступ так же, как и раньше. - возвращает ссылку на статическую переменную, созданную внутри функции (синглтон), но вы должны предоставлять параметры каждый раз, даже если они нужны только в первый раз. Статическая переменная создается только при первом вызове функции.
- Для esp8266 может быть доступен шаблон
std::Optional
. Это похоже на указатель, но вам не нужно использовать оператор стрелка->
. Но может быть посторонняя копия, когда вы назначаете (создаете) ее значение. - Вы также можете расширить 1. или 2. собственным классом для хранения параметров, а затем вернуть экземпляр
Adafruit_MQTT_Client
,
@KIIV
Смотрите также:
- Как подключиться к MQTT брокеру с помощью TLS?
- Преобразование byte* в int в Arduino
- esp32-cam публикует изображение в mqtt
- ESP8266 глубокий сон и MQTT
- ESP-01 неправильно просыпается после глубокого сна
- Приведение от 'char*' к 'char' теряет точность
- Публиковать данные json в mqtt
- Не удалось подключиться к брокеру MQTT через esp8266/32 и pub/sub client