Funktion als Rückgabetyp
-
btw. ich muss hier mal einen Vorposter korrigieren:
GetProcAddress gibt einen Funktionszeiger zurück, nämlich "void (*)(void)"
oder wie Microsoft es per typedef nennt "FARPROC".Lediglich dlsym weist den Defekt auf, einen void* zurückzugeben.
Btw. bevorzugte Nutzung von Funktionszeigern sind Callbacks.
Das trifft aber hauptsächlich im Zusammenhang mit C-Bibliotheken auf,
da man in C++ eben eher auf Templates und Funktoren setzt.
Ausnahme stellen hier DLL's dar, da man Templates nicht ohne größere Probleme exportieren kann.
-
anti-freak schrieb:
ok, passt nicht ganz, aber hat jemand irgendwo nen gutes tut für solche funktionsspielchen?
-
DrakoXP schrieb:
Lediglich dlsym weist den Defekt auf, einen void* zurückzugeben.
Das ist kein Defekt, das ist absicht. Es ist laut Standard undefiniertes Verhalten, einen Funktionszeiger in einern Funktionszeiger eines anderen Typs umzucasten.
-
DrakoXP schrieb:
Lediglich dlsym weist den Defekt auf, einen void* zurückzugeben.
Das ist kein Defekt per se, weil nicht jedes Symbol auf eine Funktion verweist. Sauberer wäre nat. eine zweite Funktion speziell für Funktionssymbole.
314159265358979 schrieb:
Es ist laut Standard undefiniertes Verhalten, einen Funktionszeiger in einern Funktionszeiger eines anderen Typs umzucasten.
Unfug.
-
DrakoXP schrieb:
btw. ich muss hier mal einen Vorposter korrigieren:
GetProcAddress gibt einen Funktionszeiger zurück, nämlich "void (*)(void)"
oder wie Microsoft es per typedef nennt "FARPROC".Du hast Recht! *staun*
Wurde das in den letzten 10 Jahren mal geändert? :xmas2:
(Aber ne, vermutlich hab ich das nicht so in Erinnerung, weil es irgendwann früher mal so war, sondern weil ich es mir einfach eingebildet habe *g*)
-
camper schrieb:
314159265358979 schrieb:
Es ist laut Standard undefiniertes Verhalten, einen Funktionszeiger in einern Funktionszeiger eines anderen Typs umzucasten.
Unfug.
Wo definiert der Standard denn das Verhalten?
-
-
Achso, reinterpret_cast.
-
Habe mir die vorherigen Posts nicht durchgesehen, aber ein boost::function-ptr scheint mir hier am Passendsten.
-
Bitte wie?
boost::function ist ein Funktor. Den man üblicherweise by-value übergibt.Hier geht's um Funktionszeiger bzw. "native" Funktionstypen.
Wo genau soll jetzt also ein "boost::function-ptr" passend sein, und was verstehst du überhaupt darunter.