I mit Standardwert als Parameter eine Methode mit einem Funktionsobjekt haben wollen aufgerufen werden, mit einer Lambda-Funktion aufgerufen werden, wie zum Beispiel:Standardfunktion Objektwert als Funktionsparameter mit einem Lambda-
#include <iostream>
#include <functional>
void func(const std::function<void()>& f = {}){
if(f) f();
else std::cout << "or not" << std::endl;
}
int main() {
func([](){ std::cout << "hello" << std::endl; });
func();
}
, aber in Visual Studio 2012 wird das nicht kompiliert (es kompiliert z. B. mit Visual Studio 2015 oder g ++) und beschwert sich über den Standardwert {}. Ändern Sie dies zu:
void func(const std::function<void()>& f = nullptr){
beheben Sie das Problem. 1) Wird diese Funktion vom Compiler nicht unterstützt? 2) Gibt es einen Unterschied zwischen beiden?
Es funktioniert auf VS2015. Für einige Definition von Werken. Es kompiliert. – doctorlove
Was bedeutet es, eine Standardfunktion zu haben? – NathanOliver
1) Es kompiliert mit 'C++ 14' ([link] (http://ideone.com/TiTiP9)). 2) Wenn du ein * empty * labda willst, kannst du schreiben: 'f = []() {}' - nicht nur 'f = {}', aber dann kommst du immer in 'if'. –