Variable Argumentliste in C++
-
Hoi,
ich will eine Art Konsole schreiben, die mir Text in einem Fenster ausgibt. Die Konsole soll beliebige (integrale) Daten formatiert ausgeben können.
In Moment dachte ich an einen Formatstring, danach beliebig viele Parameter und danach Positionsangaben. Also in etwa so:print("auflösung: %u x %u\n", width, height, 5, 200, ITALIC, /*weitere Parameter*/);
Also im Grunde wie printf.
Nur frag ich mich, ob das so elegant ist und ob es da in C++ etwas besseres gibt?Thx
-
Es ist möglich funktionen zu schreiben wie printf, sprintf etc. Das problem ist, das man in der funktion dann selber nicht weise vieviel Argumente nun übergeebn wurden! Entweder du setzen eins spez. Argument/Flag als letzes Argument das du weist wann er am letzen Argument angekommen ist , oder du machst es wie printf ! Printf erwartet soviel Argumente wie "%" im ersten Argument vorhanden sind!
-
Pi mal Daumen schrieb:
Nur frag ich mich, ob das so elegant ist und ob es da in C++ etwas besseres gibt?
Elipsen kann man auch in C++ programmieren, man sollte es aber möglichst nicht tun. Der Grund hierfür ist einmal wie Boris schon gesagt hat, das man die Anzahl der Argumente quasi "erraten" muss, und zum anderen gibt es auch keine Typsicherheit. Alternativen zu einer Elipse sind zum Beispiel Streams oder Vektorübergaben.
cu André
-
Wenn du wirklich "nur" das Verhalten von printf übernehmen willst, empfehle ich einen Blick auf man: vsprintf. Aber in C++ bist du mit IO-Streams vermutlich besser bedient.
-
Pi mal Daumen schrieb:
Hoi,
ich will eine Art Konsole schreiben, die mir Text in einem Fenster ausgibt. Die Konsole soll beliebige (integrale) Daten formatiert ausgeben können....
Gibt's schon: std::cout.

Da wird auch ein Konzept vorgestellt, das besser als Ellipsen ist: Rekursive Operatoren.
Gruß,
Simon2.