ich diese Funktion Erklärung haben:Um kein Argument aufgrund einer Bedingung passieren
void do_somthing(int a,int b,foo bar = foo());
Ich möchte für einige Argumente wie folgt nennen:
foo bar = get_bar_by_some_algorithm();
int a = 5,b = 6;
if(bar.empty()){
do_somthing(a,b);
}
else{
do_somthing(a,b,bar);
}
Ich möchte von der loswerden if
Aussage. Also, ich habe es wie folgt aus:
foo bar = get_bar_by_some_algorithm();
int a = 5,b = 6;
do_somthing(a,b,bar.empty()?foo():bar);
aber mein Ansatz akzeptabel ist (ist es gut, auch?), Wenn do_somthing
stabil ist aus Standardargument Sicht aber wenn es geändert, um etwas wie folgt aus:
void do_somthing(int a,int b,foo bar = get_special_foo());
Mein Code wird veraltet, weil foo()
nicht gleich get_special_foo()
ist.
Die Frage ist, wie kann ich ?
Operator oder ein beliebiges kurzes Äquivalent verwenden, um ein Argument im Falle von nicht leer übergeben und nicht alles im Falle leer?
Beispiel zur Verdeutlichung (Imaginary Syntax):
do_somthing(a,b,bar.empty()? the_default_argument : bar);
Beide ternären Operator und 'if' würde einen Zweig tun, BTW. – Jarod42
Sie können einfach "bar" übergeben und das 'if (bar.empty())' checken Sie in 'do_somthing' ein. – CompuChip
versuchen boost :: optional – Thomas