Ihor
у меня были проблемы с this в классе, например я хотел именно в классе реализовать методы onConnect, onDisconnect и зарегистрировать их например на фунции init, но коллбэк Wifi.onEvent([]()) не хочет видить там this и приходилось размазывать этот кусок по main.cpp, там регистрировать и дергать методы класса, хотелось бы скрыть под капот эту штуку а в main занятся более важными вещами
Ihor
а с namespace по идее такой проблемы не будет потому что экземпляр один и this нет
Ivansuper
Ух, опасно ты так сразу в лямбды пошел : )
Ihor
😅 а что там проблемы?)
Andrey
This - это ссылка на текущий экземпляр класса
Ihor
да что говорить, вобше ничего не принимает, только с глобального окружение что зарегано за функцией setup
Ihor
а в namespace работает, и вопрос в том это фича или выстрел в ногу?
Andrey
Ihor
Ihor
если обявить лямбду нормально
typedef std::function<void()> сallback_t;
то все ок, а обявление в WiFi.onEvent не такое мягко говоря)
Ivansuper
Ivansuper
В квадратных скобках то, КАК ты хочешь передать
Ivansuper
По скольку все это в конечном счете сводится к указателю на функцию, то возникают проблемы с this в случае инстансов классов/структур, ибо ты дожен подавать еще один указатель, который будет указывать на каком инстансе эту функцию вызывать
Ivansuper
Куда-то дальше тут задвигать не буду, ибо сам еще не проникся до конца данными механизмами
Ihor
вот, мы пришли к тому что всетаки тут лучше заюзать namespace?)
Ihor
и не игратся с this?
Ihor
который на проекте всеравно в одном экземпляре может быть
Ihor
так как wifi физически один
Ivansuper
Нет какого то идеально перфектного бест практис маст хева. Есть хорошее знание языка и паттернов проектирования. Сгибай их как тебе надо и решай задачи : )
Ihor
ну я хочу полностью инкапсулировный файл для работы с wifi, чтобы я не размазывал его реализацию в main.cpp
Ihor
Ivansuper
Ivansuper
Поэтому если что-то увидишь лишнее в автокомплите — не страшно
Ivansuper
Если будешь гоняться за сильной чистотой, то можешь только проблем нажить
Ihor
я про то что мне мешает этот код в main, там должен быть другой полезный код а не кишки одного из классов
Ivansuper
Понимаешь, твое стремление оправдано если ты работаешь в команде или пишешь библиотеку : )
Ivansuper
Ivansuper
В неймспейс ты можешь сложить только декларации
Ihor
да, но в классе у меня прлблемы с евентами и this, а в namespace вроде как все четко и всю реализацию я могу написать там, без помощи main.cpp
Ivansuper
А я тебя не заставляю в классе делать : )
Ihor
в main.cpp просто wifi.init(), wifi.connect() и т.д
Ihor
Ihor
в этом и вопрос мой, namespace фича или выстрел в ногу в этом случае
Ivansuper
Неймспейс ограничивает ИМЕННОЕ пространство, не имплементационное. Это важно понять : ) Т.е. ты говоришь, что есть пространство имен с такими то функциями, переменными и т.п., а конкретная их реализация это уже как ты хочешь
Andrey
Стеклянный член - если не понимаешь как пользоваться - можно разбить
Ivansuper
Потом везде где ты будешь это использовать, ты будешь культурно ограниченно видеть только через то, что объявил в неймспейсе. Так что вперед если тебя устраивает
Ihor
понял, спасибо всем!💪
Ivansuper
Еще из рубрики внезапных реклам
Ivansuper
Ihor
подскажите какой-то радиоэлемент или их связка чтобы логическими значениями можно было переключать полярность DC 12v 6A? Менять + на - и наоборот
Василий
реле, или же H-мост
Василий
угу
Ihor
Василий
я так много раз делал
Ihor
если у меня esp32 на 4мб флэша это значит что я могу занять 2мб прошиквкой и обновить её по OTA ?
Ihor
или для прошивки используется другая память?
Ivansuper
Ihor
Yuriy
Ivansuper
Yuriy
Можно кстати и не указывать непосредственно при использовании.
Если по факту - это какой это квази класс получатся - нафиг не надо - если c++, в с остра необходимость - вообще жопа без этого , но и в с++ прикольно тоже использовать
Вообще помоему самый вольный язык c - c++ такой суржик можно писать прям диво дивное - из всего по маленьку
А #define проекта с arduino и двумя целями (32, 8266) - это ... ну его нахер, ничего не помогает, костыли на костылях страшно местами строчки поменять -
PS Извините вырвалось
Yuriy
FileHelper.h
class FileHelper {
public:
FileHelper(const char* name);
void exists();
void remove();
size_t getSize();
};
Что мешает мне реализацию прям тут сделать?
Нежелание иметь include - зависиимости - которая используется для этой реализации, он будет непосредственно и только в cpp . - это вроде логично - "интерфейс" чище, реализация отдельно.
Но например конструктор бывает удобно в заголовке, чем каждый раз прыгать в сpp смотреть инициализацию.
Кстати, как предпочитаете:
SomeConstructor(int a, int b ): _a{a}, _{b}: {};
Читал что это вариант truЪ - но блин когда много этой инициализации, и еще порядок очень важен блин, это прям не нравится.
SomeConstructor(int a, int b) {
_a{a};
_b{b};
}
SomeConstructor(int a, int b) {
_a = a;
_b = b;
}
?
А так -ничего и в заголовке .h и будет ок.
Только forward declaration - будет не очень удобно, а если это глобальный класс и статические члены у него, вообще совсем не удобно, как его includ'ить потом - если в нем же место хранения?
Мне кажется исходя из этого и так и так практикуется - на каждый чих -по два файла тоже не всегда удобно.
Бывает же и один .h + много .cpp , и в .h - 100500 классов.
Каждый пишет как хочет судя по всему
Aliaksei
Парни, а есть тут кто пишет на Lua?
Slava
www.youtube.com/watch?v=qIayIuqPAmU
Slava
100$ 😭
Slava
www.arduino.cc/pro/tutorials/portenta-h7
Slava
https://www.facebook.com/official.arduino/videos/portenta-h7-runs-doom/807357443073401/
Ivansuper
Ivansuper
Но вообще да, дорогая блин. А поиграть хотелось взять
Dmitry
Сколько примерно кушает ESP32? (в активном режиме WiFi + BLE)
Egor
Wi-fi порядка 250-300 мА
Блютус порядка 130 мА
Это по памяти говорю
Egor
Dmitry
Что мешает посмотреть даташит? :)
Даташит на микруху или на модуль? :) по опыту, китайские модули esp12 вообще по разному кушают. Разброс в 200-300мА. На одинаковых прошивках
Василий
Ребята - подскажите как задать AT командой имя модуля ESP8266 - в режиме - Station ???
Ivansuper
Василий
да,
спасибо
уже тоже это нашел - проверяю
Василий
почему то не хочет устанавливать имя
AT+CWMODE?
+CWMODE:1
OK
AT+CWHOSTNAME="MyESP_123"
ERROR
Василий
написано - Если режим станции не включен, то команда вернет:
ERROR
а он включен
AT+CWMODE?
+CWMODE:1
Василий
что ему не так ???
Василий
но почему то в описании приведен пример AT+CWMODE=3 - а это уже Station + SoftAP
Василий
попробовал AT+CWMODE=3 - таже история - модуль отвечает ERROR