Dynamische Parameter

11/08/2014 16:03 Terrat#1
Hallo,
gibt es eine Möglichkeit die Parameter dynamisch zu ändern ? Sprich ich will eine Funktion schreiben die z.B. so aussieht:
GetLength(int mode,.....<-Dynamischer parameter);

Anwendung:
char *Test="Lol";
GetLengt(1,Test); <-Parameter soll sich wegen der 1 zum Char Array parameter gewechselt werden.
11/08/2014 16:18 MrSm!th#2
Du könntest es ganz einfach mit Überladung probieren, das wäre wohl das sauberste.
Variadische Templates gingen auch, aber dann müssten es Klassen sein, weil man generische Funktionen nicht partiell spezialisieren kann, was aber in diesem Fall nötig wäre.
11/08/2014 16:37 Terrat#3
Quote:
Originally Posted by MrSm!th View Post
Du könntest es ganz einfach mit Überladung probieren, das wäre wohl das sauberste.
Variadische Templates gingen auch, aber dann müssten es Klassen sein, weil man generische Funktionen nicht partiell spezialisieren kann, was aber in diesem Fall nötig wäre.
Hmm das mit den Überladen sieht net so schick aus :/ Werde aber net aus den Variadische Templates schlauer :/
11/08/2014 16:50 MrSm!th#4
Warum sieht es nicht schick aus? Es ist genau das, was du suchst.
11/08/2014 17:41 Shadow992#5
Quote:
Originally Posted by MrSm!th View Post
Warum sieht es nicht schick aus? Es ist genau das, was du suchst.
Seh ich genau so, vorallem weil du im inneren der Funktion dann eh ne Fallunterschiedung machen musst, denn einen char* kann man nicht ohne weiteres wie ein int verwenden. Daher kannst du einfach überladen und dir den extra Parameter vorne sparen.

Alternative wäre das Casten in der Funktion und das Übergeben von void Pointern, aber die Frage ist ob das viel sauberer und vorallem leserlicher ist als das Uberladen. :/
11/08/2014 23:54 MrSm!th#6
Quote:
Alternative wäre das Casten in der Funktion und das Übergeben von void Pointern, aber die Frage ist ob das viel sauberer und vorallem leserlicher ist als das Uberladen. :/
Dann doch lieber eine generische Funktion, die man für die entsprechenden Typen korrekt spezialisiert. Hat den gegenüber normaler Überladung den Vorteil, dass man eine Default-Implementation haben kann.
Warum man hier zu void* greifen sollte, sofern man nicht auf C beschränkt ist (wo dann aber ohnehin keine Überladung vorhanden ist), ist mir absolut nicht klar. Zudem hätte man dann wieder die nervige Fallunterscheidung.