Methode per callback aufrufen
-
@joerg55 sagte in Methode per callback aufrufen:
(void)(*fn)()
Dein
onTrigger
ist aber vom Typ(void)(MyTimer::*)()
...
-
das ist das Problem
-
tl;dr? Don't.
-
dieser Link ist mir hier bei einem ähnlichen Problem schon einmal genannt worden.
Mir ist klar, dass Zeiger auf Methoden äußerst problematisch sind. (z. B. beim Kopieren oder Verschieben u. s. w.).
In meinem speziellen Fall gibt es ausschließlich globale Objekte dieser Klasse, die nicht kopiert und nicht im Speicher bewegt werden.
Habt ihr noch einen Tipp, wie die onTrigger-Funktion (s. o.) aufgerufen werden kann?
-
@joerg55 Oida, Du brauchst a Instanz von deiner Klasse damitst a Memberfunktion (nicht statisch) aufrufen kannst.
-
@joerg55 sagte in Methode per callback aufrufen:
Mir ist klar, dass Zeiger auf Methoden äußerst problematisch sind. (z. B. beim Kopieren oder Verschieben u. s. w.).
Na, sands ned.
-
@joerg55 sagte in Methode per callback aufrufen:
dieser Link ist mir hier bei einem ähnlichen Problem schon einmal genannt worden.
Jo. Und? Nicht verstanden?
-
@joerg55 sagte in Methode per callback aufrufen:
In meinem speziellen Fall gibt es ausschließlich globale Objekte dieser Klasse, die nicht kopiert und nicht im Speicher bewegt werden.
Dann mach doch eine statische Funktion, die dann das die Funktion des globalen Objektes aufruft?
Also:
void global_callback() { the_global_object->member_function(); }
-
@wob Ja, so stehts ja auch in dem Link.
@Swordfish sagte in Methode per callback aufrufen:
Na, sands ned.
#include <iostream> struct foo_t { int value; void a() { std::cout << value << '\n'; } void b() { std::cout << 2 * value << '\n'; } }; typedef void(foo_t::*foo_t_member_function_ptr_t)(); int main() { foo_t foo_a{ 42 }; foo_t foo_b{ 1 }; foo_t_member_function_ptr_t a = &foo_t::a; (foo_a.*a)(); (foo_b.*a)(); // copy: foo_b = foo_a; (foo_a.*a)(); (foo_b.*a)(); foo_t_member_function_ptr_t b = &foo_t::b; (foo_a.*b)(); (foo_b.*b)(); }
-
@Swordfish sagte in Methode per callback aufrufen:
Na, sands ned.
Sorry, das kann ich nicht parsen.
Na: https://www.duden.de/rechtschreibung/na_Interjektion_Partikel?
Sands kenne ich, ist eine Cocktail-Bar. Ansonsten Sande??
ned = nicht?
-
-
@hustbaer sagte in Methode per callback aufrufen:
Is hianz kloa?
hianz = alles? Das habe ich noch nie gehoert. Ich wuerde eher sowas wie "alls" oder "allns" sagen.
Edit: y/z-Fehler beseitigt.
-
@wob
Steirisch/Burgenländisch: hianz = jetzt
(Und das "z" ist ein "z", kein QWERTY<->QWERTZ Tippfehler)
-
@Swordfish sagte in Methode per callback aufrufen:
Jo. Und? Nicht verstanden?
Ja doch, ich hoffe schon. Ich wollte eben nur keine 'externe' Routine a la global_callback() haben, weil ich die Funktionalität kapseln möchte. Ansonsten werden bei mehreren Timerobjekten ja auch wieder mehrere global_callbacks (oder entsprechende Abfragen) notwendig.
Trotzdem besten Dank erstmal für die C++Unterstützung und natürlich für den Sprachkurs
P. S. Für das 'na sands net' - Beispiel reichts bei mir nicht. Kommt unters Kopfkissen... vielleicht lern ichs ja auch noch
-
@hustbaer sagte in Methode per callback aufrufen:
(Und das "z" ist ein "z", kein QWERTY<->QWERTZ Tippfehler)
mist. Habe vorhin ne Flasche Wein aufgemacht. Es zeigt sich. Ich habe eine qwertz-Tastatur, nutze aber normalerweise eine EurKEY-Belegung (=en-us + european letters)
Schreibe gerade auf einem Envy x360, wo die Tastatur eigentlich super ist, nur dass die Idioten von HP die<>|
-Taste auf (-/Shift/AltGr)+Fn+L gelegt haben.
-
@wob Lost in translation?
-
@Swordfish sagte in Methode per callback aufrufen:
@wob Lost in translation?
Irgendwie schon. Du kannst mir Deutsch, Englisch oder Niederländisch (oder Plattdeutsch - da habe ich zumindest Grundkenntnisse) schreiben, aber nicht Österreichisch oder in obskurem Süddeutsch - von den Chuchichäschtli-Personen spreche ich erst gar nicht, obwohl die mit z.B. "Perron" für "Bahnsteig" niederländische Begriffe verwenden, die aus dem Französischem stammen
-
@wob Mocht jo nix. Bei'm red'n kumman'd leit z'samm.