Aktywne Wpisy

1-1-1-1 +293
P4ncak3 +77
Szlag człowieka trafia. Roczniki 85-00 dostały od Polski tylko i wyłącznie wysokie ceny nieruchomości, wysokie stopy procentowe, zniszczona demografię, zerowe szanse na emeryturę, wysoka inflację i wojnę przy granicy. Jak ktoś jest zdrowy, uczył się za granicą lub prywatnie, pracuje na etacie i nie jest znajomym krolika to został tak wyruch w 4 litery jak nikt. Kiedy jakieś protesty?
I nie, roczniki po 00 jeszcze nie miały czasu wejść na rynek pracy
I nie, roczniki po 00 jeszcze nie miały czasu wejść na rynek pracy





Robię oprogramowanie bazujące na komunikacji DBus, wykorzystując sdbus-c++ i napotkałem problem z callbackami:
W uproszczeniu program ma działać tak, że zgłaszany jest callback od DBusa, w którym odbierane są pewne dane i wywołując metodę "push" Managera mają być przekazane do kontenera.
W klasie "DBus" mam referencję na obiekt klasy "Manager". Funkcja rejestrowana jako callback musi być funkcją statyczną, stąd pytanie: jak mogę zrobić, żeby podczas wywołania tego callbacka wywołać również metodę Managera? Wiadomo, że referencja nie będzie statyczna, stąd nie można tego zrobić. Teoretycznie mógłbym zrobić statyczne metody klasy Manager, ale to się wiąże z powołaniem statycznych zmiennych, w których przechowuje dane itd.
Podejrzewam, że źle podchodzę do tematu i problem leży w źle zaplanowanej architekturze.
Trochę pseudokodu co chciałbym uzyskać:
https://pastebin.com/UyKfpT0H
#programowanie #programista15k #cpp #linux
this {
return this->funkcja(argument1, argument2);
}
czy funkcja do rejestrowania callbacku nie przyjmuje przypadkiem wskaźnika na funkcję, który przyjmuje void* i void* jako jakieś "data"? możesz wtedy scastować this na void* i potem w wskaźniku scastować ponownie na typ thisa
Jak robisz taki forwarding to mozesz skorzystac tez z std::bind(&Dbus::receiver, this).
this{ return this->costam(msg); }
Oczywiście musisz pilnować żeby czas życia this'a się nie skończył przed wywołaniem callbacka.
registerMethodprzyjmuje typmethod_callbackktóry tak naprawdę jest:using method_callback = std::function;Wiec możesz tam przekazać dowolny obiekt, który da się wywołać z tym parametrem, najlepiej lambdę jak kolega wyżej napisał.