Einige Argumente in einer C ++ Funktion überspringen?

8

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?

    
kyrpav 26.09.2013, 09:20
quelle

4 Antworten

5

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.

    
bstamour 26.09.2013 13:03
quelle
1

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

    
Davidbrcz 26.09.2013 13:18
quelle
0

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.

    
Adarsh Kumar 26.09.2013 09:26
quelle
-2

Wahrscheinlich ist das etwas, das Sie suchen, nur ein Workaround!

%Vor%

Das folgende ist eine andere Problemumgehung möglicherweise hilft das auch!

%Vor%     
linuxstack 05.01.2017 03:31
quelle