variable Argumentenliste
-
Ich möchte in einer Funktion eine unbestimmte Anzahl von Argumenten verarbeiten.
Dazu habe ich folgendes gefunden
int foo(int Anzahl, ...){/**/} void main(void) { foo(3, 0,1,2); }Das geht alles sehr schön. Nur möchte ich noch zusätzliche (vector) Parameter übergeben.
Alsotemplate<typename T> int TForm1::foo(vector<vector<T> > *vec, int Anzahl, ...){/**/}Das alleine kann auch so dastehen. Aber wenn ich die Funktion aufrufe
foo(&vec, 3, 0, 1, 2);gibts ne Fehlermeldung
[C++ Fehler] Unit1.cpp(43): E2285 Keine Übereinstimmung für 'TForm1::foo<T>(vector<vector<AnsiString,allocator<AnsiString> >,allocator<vector<AnsiString,allocator<AnsiString> > > > *,int,int,int,int)' gefunden
Plötzlich stört wohl der vector in der Argumentenliste. Warum.
Was kann ich da machen?
-
Hab jetzt gemerkt, das es ohne
template<typename T> int TForm1::foo(vector<vector<T> > *vec, int Anzahl, ...){/**/}geht
Der vector im Funtionsrumpf muss dann explizit als vector<vector<AnsiString> > *vec deklariert werden.Ich hätte trotzdem noch ne Frage, gibt es eine Möglichkeit
bei foo(int Anzahl, ...) die int Anzahl wegzulassen, also die Argumentenliste völlig dynamisch offen zu lassen?
-
Nein
-
Du könntest vereinbaren als letzten Parameter immer 0 zu übergeben.
Greetz, Swordfish
-
Swordfish schrieb:
Du könntest vereinbaren als letzten Parameter immer 0 zu übergeben.
Greetz, Swordfish
Und dann?
-
Naja, dann kanste alle Parameter abarbeiten, bis du irgendwann beim wert 0 ankommst und weißt das Schluss ist!?
Greetz, Swordfish
-
@Trulli
Warum nimmst du statt der variablen Argumentliste nicht einen vector<int>. Dann kannst du beliebige Größen verwenden.
-
Weil ich nicht so machen will..
vector<int> inti; inti blablabla... foo(Arg, inti)sondern
foo(Arg, bla, bla 2,4);
-
1. in C/C++ gibt es keine variablen Argumentlisten (höchstens Vorbelegungen)
2. Wenn du keinen Zeiger oder vec oder stuct oder anderen "Container" nutzen willst / kannst, muss es dabei bleiben
-
Christian211 schrieb:
1. in C/C++ gibt es keine variablen Argumentlisten (höchstens Vorbelegungen)
Das ist falsch. Sieh mal in den Standard 8.3.5 und dort besonders Abschnitt 2.
Ausschnitt darausIf the parameter declaration clause terminates with an ellipsis, the number of arguments shall be equal to or greater than the number of parameters specified. Where syntactically correct, “, ...” is synonymous with “...”. [Example: the declaration
int printf(const char*, ...);
declares a function that can be called with varying numbers and types of arguments.
printf("hello world");
printf("a=%d b=%d", a, b);
However, the first argument must be of a type that can be converted to a const char*. ] [Note: the standard header <cstdarg> contains a mechanism for accessing arguments passed using the ellipsis (see 5.2.2 and 18.7). ]
-
Das muss ich heute abend mal ausprobieren. War mir neu. Habe ich auch noch in keiner Doku gesehen