Как передать указатель на метод функции, которая принимает указатель на функцию? [дубликат]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как передать указатель на метод функции, которая принимает указатель на функцию? [дубликат]

Сообщение Anonymous »

У меня есть класс:

Код: Выделить всё

#include "pico/stdlib.h"
#include "hardware/gpio.h"

class ButtonsController
{
public:
ButtonsController(){};

void UpdateButtons(bool first_enable, bool second_enable, std::string first_label, std::string second_label)
{
gpio_set_irq_enabled_with_callback(10, GPIO_IRQ_EDGE_FALL, false, ButtonCallback);
gpio_set_irq_enabled_with_callback(11, GPIO_IRQ_EDGE_FALL, false, ButtonCallback);
add_alarm_in_ms(500, EnableButtons, nullptr, false);
}

private:

void ButtonCallback(uint gpio, uint32_t events)
{
if(gpio == config::kButton_left_pin)
{
printf("ButtonCallback BTN 1 \n");
btn1_pressed = true;
}
if(gpio == config::kButton_right_pin)
{
printf("ButtonCallback BTN 2 \n");
btn2_pressed = true;
}
}

int64_t EnableButtons(alarm_id_t id, void *irq_state)
{
gpio_set_irq_enabled_with_callback(10, GPIO_IRQ_EDGE_FALL, irq_btn_1_enabled, ButtonCallback);
gpio_set_irq_enabled_with_callback(11, GPIO_IRQ_EDGE_FALL, irq_btn_2_enabled, ButtonCallback);

return 0;
}

bool btn1_pressed{false};
bool btn2_pressed{false};
bool irq_btn_1_enabled;
bool irq_btn_2_enabled;
};

Проблема в том, что функции:
  • Код: Выделить всё

    gpio_set_irq_enabled_with_callback(uint gpio, uint32_t events, bool enabled, void (*)(uint gpio, uint32_t event_mask))
  • Код: Выделить всё

    add_alarm_in_ms(uint32_t ms, long long (*)(alarm_id_t id, void *user_data) callback, void *user_data, bool fire_if_past)
принимайте указатель на функцию в качестве одного из параметров. В моем случае я хочу передать указатель на метод этого класса, т.е. ButtonCallbak() Есть ли способ сделать это? Или мне следует полностью изменить концепцию?
Мне приходит в голову идея изменить эти методы на статические, но для этого также потребуется изменить переменные-члены на статические... Я не уверен, что это так. Я должен следовать.
РЕДАКТИРОВАТЬ:
У меня будет только один экземпляр ButtonsController.

Подробнее здесь: https://stackoverflow.com/questions/789 ... a-function
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»