eine funktion -> zwei namen
-
bei mir passiert es des öfteren, das ich eine größere funktion für zwei verschiedene anwenungszwecke benöige. der code wäre in bei diesen anwendungszwecken lesbarer, wenn jeweils ein eigener name für die funktion existieren würde, der besser zum anwenungszweck passt.
bei varibalen geht das ja so:
typedef unsigned int counter; typedef unsigned int size;..und bei funktionen?
-
Funktionszeiger mit typedef definieren, geht im Prinzip genau gleich wie mit Typen.
-
Z.B. so:
int foo(int a) { return bar(a); } int bar(int a) { return a+27; }
-
Dann stimmt etwas nicht mit deiner Funktion und dessen Aufgabe. Vermutlich kannst du deine Funktion in kleiner knackigere Funktionen zerlegen und die Aufgabenteilung besser gestalten. Gib mal ein Beispiel.
Zu deiner Frage: So ein typedef gib es für Funktionen nicht, du könntest aber sowas über Funktionsobjekte simulieren:
struct MySuperDuperFunction { void operator() { .. cool stuff } }; MySuperDuperFunction functionA, functionB; functionA(); functionB();
-
Am einfachsten sind immer noch Templates. Geht fast immer:
#define FN_ALIAS(o,n) \ template <typename... Args> \ inline auto n(Args&&... args) -> decltype(o(std::forward<Args>(args)...) \ { o(std::forward<Args>(args)...); } FN_ALIAS(original, foo) FN_ALIAS(original, bar)(hier im Antwortfenster gecoded, ungetestet)
Wobei ich das ganze ziemlich verwerflich finde und mir keine sinnvolle Anwendung in den Sinn kommt.
-
Kann durchaus gelingen. Doch wozu soll das gut sein? Kann nur jeden verwirren oder gar verzweifeln lassen, der ein solches Programm später in die Hände bekommt und fortschreiben oder pflegen soll!

-
danke für die schnellen antworten. das mit den funktionsobjekten war die idee, die ich brauchte

-
Wobei es mit Funktionszeiger (siehe lala) in Verbindung mit auto noch einfacher sein kann:
int myFunction(); auto functionA = &myFunction; auto functionB = &myFunction; functionA(); functionB();
-
berniebutt schrieb:
Kann durchaus gelingen. Doch wozu soll das gut sein? Kann nur jeden verwirren oder gar verzweifeln lassen, der ein solches Programm später in die Hände bekommt und fortschreiben oder pflegen soll!

Das sollte nochmals betont werden. Hier werden die kühnsten Antworten gegeben (Makros, Funktoren, Funktionszeiger), ohne dass überhaupt bekannt ist, wozu sowas gut sein soll.
gamer8o4, was spricht dagegen, zwei Mal die gleiche Funktion aufzurufen? Du wirst beim Debuggen dankbar sein, wenn du keine künstliche Abstraktion eingeführt hast.
<:xmas2:>
-
Imo solltest du dein Vorhaben nochmal gründlich überdenken, das Ganze klingt mir sehr merkwürdig...
Abgesehen davon:
int doStuff() { ... } inline int doThings() { return doStuff(); }
-
mir ist auch aufgefallen, dass das das bisher relativ gute design meines projektes irgentwie zerstört.
ich lass das mal lieber doch sein und benutze keine alias namen für meine funktionen.