LINUX.ORG.RU

Передача параметров в функцию С++

 , ,


0

2

Проблема заключается в следующем. Есть функция, вот её прототип.

void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode);
есть так же класс
class Foo
{
    ..
    void ololo();
    ..
}
в его конструкторе я пытаюсь вызвать функцию attachInterrupt следующим образом
attachInterrupt(0, this->ololo, FALLING);
на что получаю ответ
error: cannot convert ‘Foo::ololo’ from type ‘void* (Foo::)()’ to type ‘void (*)()’
Понимаю, что вся проблема скорее всего в том, что надо правильно преобразовать типы, но не могу допереть как именно. Если вызывать attachInterrupt не из класса и не для члена класса, то всё работает. Подскажите пожалуйста, как правильно вызвать? Пните пожалуйста в нужном направлении, где я смогу раз и навсегда разобраться в этой теме.

★★★★

Последнее исправление: CYB3R (всего исправлений: 2)
Ответ на: комментарий от ilammy

делая так я не могу обращаться из метода ololo к другим членам этого же класса через this. как обойти?

WRG ★★★★
() автор топика
Ответ на: комментарий от WRG

Любой не-статический метод класса неявно получает первым аргументом this. Вы должны это как то обеспечить (скажем указать в типе указателя на ф-ю что она получает this, но этот this надо еще как то передать туда при вызове).

Можно написать обертку, которая будет вызывать соотв. функцию подсовывая this из какой нить глобально переменной, но это жуткий костыль.

AIv ★★★★★
()
Ответ на: комментарий от WRG

Передавать this, очевидно же. Если надо передать коллбек с состоянием в сишный код, то забрасывают указатель на функцию типа void (*)(void*) где та void* — это юзерский контекст, который внутри коллбека кастуется к чему надо. Можно передать this так. Если там можно передавать плюсовые объекты, а указатель на функцию стоит просто из-за незнания чего бы-то ещё, то тут уже насоветовали всяких std::function.

ilammy ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.