Piszę funkcję C + 11, która pobiera argument jako argument, i chciałbym, aby ten argument był domyślny dla funkcji no-op. To moja najlepsza próba tej pory:C++ 11 lambdas jako domyślne argumenty funkcji
const std::function<void()> noop= [](){};
void f(int x, int y, std::function<void()> fn= noop) { /* ... */ }
Zastanawiam się, czy standardowe biblioteki zapewnić „noop” funkcję std dla mnie, czy muszę pisać moje własne, jak mam powyżej? Zastanawiam się również, czy istnieje sposób uniknięcia jawnego nazwania funkcji "noop". Na przykład:
void f(int x, int y, std::function<void()> fn= [](){}) { /* ... */ }
nie skompilować (w Visual Studio 2012 Update 3), ani nie będzie:
void f(int x, int y, std::function<void()> fn= std::function<void()>([](){})) { /* ... */ }
+1: Dobre pytanie, ale co z tą małą poprawką? 'void f (int x, int y) {f (x, y, []() {}); } '(gdzie' void f (int, int, std :: function) 'jest oryginalną funkcją bez opcjonalnego parametru) –
Zeta
Działa w g ++ 4.7.2 BTW. –
Nie powinieneś tworzyć 'noop' a' std :: function', make it 'auto noop = [] {};'. Podejrzewam, że VS2012 jest w błędzie. A kanoniczne noop to '[] {}' - save '()'! Lub '<:]{%>' (klaunowe noop) dla maksymalnej rozrywki. – Yakk