Ich habe eine C ++ Funktion, die 5 Argumente hat, die alle Standardwerte haben. Wenn ich die ersten drei Argumente übergebe, wird das Programm den beiden letzten Argumenten einen Standardwert zuweisen. Gibt es eine Möglichkeit, 3 Argumente zu übergeben, und einen in der Mitte zu überspringen, Werte zu sagen, das erste, zweite und fünfte Argument zu geben?
Nicht direkt, aber Sie könnten etwas mit std :: bind tun:
%Vor%Der Nachteil ist natürlich, dass Sie die Standardparameter neu festlegen. Ich bin sicher, dass jemand anderes mit einer clevereren Lösung kommen wird, aber das könnte funktionieren, wenn du wirklich verzweifelt bist.
Mit einer klassischen 5 Argumente-Funktion gibt es keine Möglichkeit, es nur 3 oder 4 zu geben. Sie können nur 3 oder 4 mit Standardargumenten schreiben, aber am Ende erhalten Sie einen Funktionsaufruf mit 5 Argumenten.
Es gibt auch Probleme mit Ihrem System, wenn mehrere Parameter desselben Typs vorhanden sind.
Wenn Sie beispielsweise foo(int a=4,int b=5)
und foo(10)
haben, wissen Sie, wie Sie foo(10,5)
oder foo(4,10)
aufrufen möchten?
Mit C ++ 11 Tupel und Benannte Parameter idiom , können Sie es ein wenig betrügen .
%Vor%Eine alternative Methode ist die Verwendung von std :: bind wie beschrieben dort
Nein, das ist nicht möglich.
Ich würde jedoch vorschlagen, dass Sie stattdessen das Parameterarray verwenden sollten, um das von Ihnen angegebene Szenario zu erreichen. Sie können auch überlasten. Wenn die Datentypen der Parameter variieren, sollten Sie eine Klasse definieren, für die Parameter als Mitglieder erforderlich sind . Übergeben Sie das Objekt dieser Klasse. Es wird nicht nur Ihr Problem lösen, sondern es wird auch aus Sicht der Wartbarkeit empfohlen.
Wahrscheinlich ist das etwas, das Sie suchen, nur ein Workaround!
%Vor%Das folgende ist eine andere Problemumgehung möglicherweise hilft das auch!
%Vor%Tags und Links optimization c++ arguments default-arguments