2016-08-21 1 views
-2

Ich habe viele Ressourcen und in den Beispielen gesucht, die sie bieten, sieht es wie folgt aus: Wie kann ich einen voreingestellten Parameter angeben, ohne vorherige zu wiederholen?

bar(b : 'Z'); 

aber es gibt:

void bar(int a = 4, char b = 'A') 
{ 
} 

Nach this resource kann es wie genannt werden mir ein Fehler identifier "b" is undefined. Ich verwende Visual Studio 2015 Update 3 Enterprise.

Haben Sie Vorschläge, wie Sie nur den zweiten Parameter angeben?

+5

Das ist ein Vorschlag –

+0

Übrigens wird dieser Vorschlag wahrscheinlich nie umgesetzt werden (soweit ich das beurteilen kann), weil er mit den technischen Aspekten der C++ - Funktionen kollidiert und die Möglichkeit bietet, verknüpfbare Bibliotheken mit allem, was nicht funktioniert, kompatibel zu machen Dort. –

+0

Ok, wird geschlossen – mihkov

Antwort

7

Das Papier, das Sie verlinken, ist nur ein Vorschlag¹. Der Mechanismus, den Sie zu verwenden versuchen, ist (derzeit) kein Bestandteil von C++, wie in den Standards definiert. Sie können daher nicht erwarten, dass Compiler es implementieren.

Derzeit gibt es keine anderen Standardumgehungen. Wenn Sie einen Parameter festlegen möchten, müssen Sie auch alle Parameter angeben, die in der Funktionsdeklaration davor stehen.

Sie können etwas wie Boost Parameter verwenden oder etwas ähnliches selbst implementieren, um die Funktion mit Benutzercode zu emulieren. Ob das eine gute Idee ist oder nicht, steht zur Debatte, es ist nicht allzu häufig und kann daher für andere Programmierer verwirrend sein.


¹This könnte ein Sprachproblem sein: Ein „Vorschlag“ ist etwas, das jemand wäre gut, sagt, nicht der Staat die Dinge sind.

0

Eine mögliche Lösung könnte sein, std::bind mit den in diesem Namespace definierten Platzhaltern zu verwenden. Zum Beispiel:

void bar(int a = 4, char b = 'A') { 
} 

using namespace std::placeholders; 
auto f = std::bind(bar, 2, _2); 
f('Z'); // equivalent to bar(2, 'Z'); 

Wie in der anderen Antwort vorgeschlagen, gibt es keine Möglichkeit den std::bind Ausdruck zu haben, das Standard-Argument aus der Funktionsdeklaration verwenden, aber es zumindest ermöglicht es Ihnen, nur eines des Arguments, um es an.

Verwandte Themen