geben Sie Standardwert von std::function
void func(const std::function<void()>& f = empty)
{
if(f)
f();
}
was ist die 'leer' sein sollte? Ich benutze [](){}
. Aber technisch, das ist nicht leer, f() ausgeführt wird.
Du musst angemeldet sein, um einen Kommentar abzugeben.
LIVE DEMO
oder
std::function
wirft einige Ausnahme (ich habe vergessen, welche)....1/ An exception of type bad_function_call is thrown by function::operator() (20.8.11.2.4) when the function wrapper object has no target.
?Ich mit einem nullptr für den freien Fall. Es kann verwendet werden, da Sie nie benutzt volle Funktion-Objekte, sondern nur Zeiger auf Sie, so
func(f1);
wird in der Tatfunc(&f1)
=> Sie werden immer übergeben von Zeigern an Funktionen, sonullptr
ist IMHO der beste Kandidat.Diese kompiliert und ausgeführt:
Die alternative der Verwendung einer Standard-Funktion wäre:
mit Ausnahme abfangen. Die Wahl zwischen den 2 hauptsächlich hängt davon ab, ob Sie erwarten, dass die leeren Fall auftreten, fast nie: gehen mit Ausnahme vs. manchmal: testen Sie, bevor Sie anrufen.
Als Frage erwähnt
if (f)
verwendennullptr
Können Sie versuchen, wie diese:
Als Basile Hinzugefügt, der standard sagt: