Witam
Muszę zbindować metodę klasy na void (*fun)(const unsigned, const unsigned)
ponieważ funkcja rejestrująca przyjmuje taką sygnaturę, ona jest z innej libki z C i tego nie mogę zmienić. Dla uproszczenia taki przykład sobie napisałem i nie mogę go skompilować:
#include <stdio.h>
#include <iostream>
#include <functional>
bool registerFun(unsigned id, void (*observedFunct)(const unsigned x, const unsigned y)) //taką mam sygnaturę API, którego nie mogę zmienić
{
return true;
}
class Klasa
{
public:
void metoda()
{
//najpierw lambdą próbowałem ale też nie działa
//auto fun = [&](const unsigned x, const unsigned y) -> void
//{
// this->observedFunction(x, y);
//};
using namespace std::placeholders;
auto fun = std::bind(&Klasa::observedFunction, this, _1, _2);
registerFun(1, fun);
}
void observedFunction(const unsigned x, const unsigned y) //tą funkcje musze zarejestrować jako callback
{
}
};
int main()
{
Klasa().metoda();
return 0;
}
Wydaje mi się że się nie da czegoś takiego zrobić bo funkcja wolna to funkcja wolna, ma zwracaną wartość, argumenty i tyle a z metodą klasy zawsze pointer na obiekt jest powiązany, więc jak nie mogę zmienić sygnatury rejestrowaczki to nic tu nie zdziałam, mam rację? Musiałbym w rejestrowaczce dodać argument Klasa* ptr
., ale rejestrowaczki nie mogę ruszyć.