У меня есть следующий код API, предоставленный библиотекой PiGPIO.По сути, он позволяет вам установить функцию обратного вызова, когда состояние контакта было изменено.
Обычно API выглядит так:
typedef void (*gpio_callback_t)(int, int, uint32_t);
int gpioSetAlertFunc(int, gpio_callback_t)
И его можно вызывать так:
void callback_func(int pin, int NewLevel, uint32_t CurrentTicks)
{
// Callback process
}
int main()
{
// Setting up callback function
gpioSetAlertFunc(10, callback_func)
// Do stuff while callback will be called independently
}
Теперь приведенный выше код работает отлично!
Большая проблема возникает, когда я пытаюсь обернуть этот код в класс C ++.Класс должен выглядеть следующим образом:
class Pin
{
public:
Pin()
{
gpioSetAlertFunc(10, this->internal_gpio_callback) );
}
void internal_callback_func(int pin, int level, uint32_t tick)
{
cout << "New level: " << pin << " " << level;
}
}
Проблема в том, что ссылка на эту функцию недопустима, поскольку она не является статической функцией.Чтобы вещи были более сложными, я не могу просто сделать функцию обратного вызова статической.Эта функция обратного вызова будет сильно взаимодействовать с остальными методами класса и ее внутренними переменными.
Знаете ли вы обходной путь для этого?Или, может быть, грязный хак с использованием указателей или что-то в этом роде?