2016-04-10 12 views
2

Wie kann ich ein Tupel als Standardwert in eine Funktion einfügen?Tupel als Standardwert im Funktionsparameter

Diese Prototypen erhöhen Fehler kompilieren:

void f(std::tuple<int, int>=std::tuple<int, int>(1, 1)); 
void f(std::tuple<int, int>=std::make_tuple(1, 1)); 
void f(std::tuple<int, int>=(1, 1)); 
+0

Setzen Sie ein Leerzeichen vor dem '='. – 0x499602D2

+0

'double' und' 1.' sind ungerade Auswahlmöglichkeiten für 'std :: tuple '. – molbdnilo

+0

Entschuldigung, ich habe diesen Tippfehler behoben. – aluriak

Antwort

6

Alles, was Sie fehlt, ist ein Raum:

void f(std::tuple<int, int> =std::make_tuple(1, 1)); 

As-ist, die >= als ein einziges Token analysiert wird.

Das Hinzufügen eines Variablennamens hätte das Problem auch leicht aus dem Weg geräumt.

+0

Ist das wie es im Standard definiert ist? Ich würde erwarten, dass C + 11 beim Parsen von Klammern keine Probleme haben sollte – texasbruce

+2

@texasbruce Eine Ausnahme wurde für '>>' gemacht, aber normalerweise lautet die Regel "max chomp" – Barry

-2
void f(std::tuple<int, int> t = std::make_tuple(1, 1)); 

oder

void f(std::tuple<int, int> = std::make_tuple(1, 1)); 

oder

void f(std::tuple<int, int> = std::tuple<int, int>(1, 1)); 

oder

void f(std::tuple<int, int> = std::tuple<int, int>{1, 1}); 
+1

Anscheinend gibt es hier Leute (mehrere> 1), die ohne besonderen Grund abstimmen. Ich nehme das als Kompliment: P – 101010

-2

Die ganze Sache ist, dass Sie den Namen vermissen :) Sie vergessen, Ihre Variable zu nennen.

void f(std::tuple<int, int>x=std::make_tuple(1., 1.)) 

Sollte

prüfen diese docs für weitere Informationen arbeiten.

attr (optional) Decl-specifier-Seq declarator = initializer

Der "declarator" Teil von Ihrer Definition fehlt.

Jeder Deklarator führt eine einzelne Variable oder Funktion in das Programm ein. Die einfachste Form des Deklarators ist nur der Name Einführung - die Deklarator-ID.