Задать вопрос

Как преобразовать std::function в указатель на функцию?

Имеется функция WlanRegisterNotification, у которой один из аргументов имеет тип void (*callback)(PWLAN_NOTIFICATION_DATA, PVOID).
Необходимо сделать вывод окна QMessagebox если wifi отключится.
Проблема: для вывода окна нужен this (класса, который связан с QWidget), для этого хорошего подходит лямбда.
Но лямбду нужно сконвертировать в указатель на функцию (выше).
std::function<void(PWLAN_NOTIFICATION_DATA data, PVOID context)> callback = [](PWLAN_NOTIFICATION_DATA data, PVOID context){
QMessagebox::warning(this,"WIFI","WIFI отключился");
};
 WlanRegisterNotification(callback); //не работает: нужен указатель на функцию, а не std::function
  • Вопрос задан
  • 264 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Нетология
    Специалист по информационной безопасности + нейросети
    12 месяцев
    Далее
  • Компьютерная академия «TOP»
    Учебная программа “Разработка программного обеспечения”
    30 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@Xiran
Как-то так:
auto callback = [](auto, void *data) {
	QMessagebox::warning(reinterpret_cast</* Имя класса */>(data), "WIFI", "WIFI отключился");
}

WlanRegisterNotification(/* ... */, callback, this, /* ... */);


void* - тоже самое, что и PVOID.
Если будут ошибки компиляции, отправьте их.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы