variable anzahl an parametern delegieren
-
Hallo,
ich würde gerne eine Methode implementierenm, die eine variable anzahl an argumenten hat. Also sowas:
void myMethod1(int a, int b, ...) { //Aufruf myMethod2 }Wie kann ich nun die variablen Argumente einfach an eine andere Methode delegieren, die so aussieht:
void myMethod2(int a, int b, ...)Vielen Dank!
-
Warum übergibst du nicht einfach einen std::vector oder wenn du es kompliziert magst einen Zeiger auf ein Array mit bestimmter Länge.
-
Aus C gibt es ellipsen http://www.cplusplus.com/reference/clibrary/cstdarg/
Zeig aber mal was du machen möchtest, denn empfehlenswert ist das nicht unbedingt.
-
Vielleicht passen variadic templates.
Sowas wie
//C++0x template<typename ...Args> void myMethod1(Args&&... params){ myMethod1(std::forward<Args>(params)...); }
-
myMethod1 soll eine Art Wrapper sein, die zum Beispiel printf und andere Ausgabemöglichkeiten wrapt. Bei printf soll sie die variablen parameter einfach delegieren...
-
Da printf selber nicht typsichere ellipsen verwendet, kannst du auch das aus stdargs benutzen. Da kannst du nichts schlecht machen, weil es eh schon schlecht ist. In C++ meidet man diese Dinge.
Benutze in C++ die io Streams. Oder schreib halt C.
-
Hm, würde neben printf eben auch gerne syslog für die Ausgabe in log-files benutzen. Dann muss ich wohl über cstdarg gehen. Ich dachte es gäbe eine einfachere Möglichkeit alle Parameter (inkl. die variablen Parameter) einfach weiterzuleiten...
Gruß
henryy
-
henryy schrieb:
Hm, würde neben printf eben auch gerne syslog für die Ausgabe in log-files benutzen. Dann muss ich wohl über cstdarg gehen. Ich dachte es gäbe eine einfachere Möglichkeit alle Parameter (inkl. die variablen Parameter) einfach weiterzuleiten...
Wenn der Header
<cstdarg>extra für variable Argumentlisten existiert, warum sollte es einfacher ohne gehen?Und du musst dich halt zwischen Typsicherheit und Frickelei entscheiden. In C++ sollte die erste Möglichkeit bevorzugt werden (in C natürlich auch, aber da wird es mangels Sprachmitteln manchmal schwieriger).