Überladene Funktionspointer?
-
if(func=="test1")
Es wundert mich wirklich, dass das funktioniert...Ein strcmp(func, "test1") == 0 wäre glaub ich angebrachter !
-
Original erstellt von <GOGO>:
**kann man den gleichen Funktionspointer zuerst auf test1 und später auf test2 setzen und dann die Funktion aufrufen?
**ja.
#include <iostream> using namespace std; int test1(int a) { return a*a; } int test2(int a,int b) { return a*b; } int main() { void (*f)()=reinterpret_cast<void(*)()>(&test1); cout<<(*reinterpret_cast<int(*)(int)>(f))(4)<<endl; f=reinterpret_cast<void(*)()>(&test2); cout<<(*reinterpret_cast<int(*)(int,int)>(f))(3,4)<<endl; return 0; }
-
Pfui
Sag wenigstens dazu das es undefiniert ist, oder ist es das nicht?
-
Was soll daran undefiniert sein?
@volkard: Arbeitest du öfters so, oder wolltest du nur auf die Frage antworten?
-
Jo das ist super - nur etwas lang... ich habe gehofft man kann dann einfach f() benutzen...
Gibts vielleicht eine Abkürzung für den Aufruf?
-
könntest um es zu kürzen die reinterpret_cast's durch C-Casts ersetzten, aber schön ist das nicht;)
-
Original erstellt von <GOGO>:
@volkard
Gibts vielleicht eine Abkürzung für den Aufruf?jo, gibts. aber ich wllte die fürchterlichkeit unterstreichen und werde weder typedefs, templates noch c_casts zur rein optischen verschönerung anbringen.
-
Original erstellt von Helium:
@volkard: Arbeitest du öfters so, oder wolltest du nur auf die Frage antworten?schlimm, daß du mir sowas zutraust.
-
Hm verdammt - ich suche eine bessere Lösung.
Wenn die redifinition etwas länger ist - dann ist es OK
aber ich hätte gerne den gleichen Aufruf wie bei normaler Funktionf=###setzte funktionspointer###
f(4);
f=###setzte funktionspointer###
f(3,4);das wäre ideal/genial...
-
ich glaub', daß du mehr sprachmittel brauchst. insbesondere template-klassen, die vin einer gemeinsamen basisklasse erben und so ein gerödel. und dann wirste schon was geeigneteres finden als ausgerechnet vollkommen unleserliche funktionspointer.