Gibt es eine Möglichkeit, einen Standardparameter in einer variablen Funktion anzugeben (gilt auch für Vorlagen)?
Antworten
Zu viele Anzeigen?In C++ können Sie die variadische Funktion durch eine auf dem Named Parameter Idiom basierende Funktion ersetzen.
Siehe den C++ FAQ-Eintrag 10.20 Was ist das "Named Parameter Idiom"? .
Dadurch erhalten Sie Standardfunktionen und eine praktische Notation.
Prost & hth.,
Warum sollten Sie sowohl variadische als auch Standardparameter benötigen?
Zum Beispiel,
myFunc(int a=5, int b=5, int c=5);
kann 0-3 Parameter mit Standardwerten empfangen, und
myFunc(...)
kann eine beliebige Anzahl von Parametern enthalten. Innerhalb der Funktion können Sie auf fehlende Parameter prüfen und bei Bedarf die Standardwerte eingeben.
Zunächst eine C++-Antwort.
Ein Standardparameter ist ein Parameter, von dem Sie wissen, dass die Funktion ihn als gegeben ansehen soll und wird. Sie sollten diese Parameter also definitiv benennen und können dann Standardargumente bereitstellen. Dies wäre eine "kurze" Version Ihrer Funktion.
Wenn Sie zusätzlich zu diesen Standardargumenten noch die Möglichkeit haben wollen, eine va_arg
Argumentliste überladen Sie Ihre Funktion einfach mit einer zweiten Version, die genau dies tut. Für diese "lange" Version müssen Sie ohnehin alle Argumente angeben, es wäre also sinnlos, hier Standardargumente zu haben.
Jetzt eine C-Antwort
Wahrscheinlich haben Sie sich nicht mit so etwas beschäftigt, aber mit der va_arg
Makro Eigenschaften von C99 ist es möglich, zu definieren Standardargumente für Funktionen in C auch. Die Makrosyntax ist insofern freizügiger als in C++, als Sie Argumente auch in der Mitte eines Funktionsaufrufs auslassen können, nicht nur am Ende. Wenn Sie also Ihre Funktion wie folgt deklariert hätten
int toto(int a, ...)
und Standardargumente für die Positionen 2 und 3 angegeben haben, könnten Sie es z. B. wie folgt aufrufen
toto(4,5,,,37);
In diesem Sinne ist es in C also möglich, das zu tun, worum Sie gebeten haben. Ich persönlich würde sicherlich zögern, dies zu tun.