Bir argüman olarak callable olan bir C + 11 işlevi yazıyorum ve bu argümanın varsayılan bir op fonksiyonuna sahip olmasını istiyorum. Bu benim en iyi girişimi şimdiye kadar: Ben standart kütüphaneler benim için "noop" std fonksiyonunu sağlamak, ya da ben yukarıda sahip olarak kendi yazmak gerekiyor olmadığını merak ediyorumC++ 11 varsayılan işlev argümanları olarak 11 lambdas
const std::function<void()> noop= [](){};
void f(int x, int y, std::function<void()> fn= noop) { /* ... */ }
? Ayrıca, "noop" işlevini açıkça belirtmekten kaçınmanın bir yolu olup olmadığını merak ediyorum. Örneğin:
void f(int x, int y, std::function<void()> fn= [](){}) { /* ... */ }
(Visual Studio 2012 Güncelleme 3) derlemek, ne olacak olmaz: Ben standart kütüphaneleri bir "noop" std fonksiyonunu sağlamak olup olmadığını merak ediyorum
void f(int x, int y, std::function<void()> fn= std::function<void()>([](){})) { /* ... */ }
+1: Güzel soru, peki ya bu küçük tamir? void f (int x, int y) {f (x, y, []() {}); } '(burada' void f (int, int, std :: function) 'isteğe bağlı parametre olmadan özgün işlevinizdir) –
Zeta
g ++ 4.7.2 BTW'de çalışır. –
'noop' a' std :: function' yapmamanız, 'auto noop' yapmamalısınız [] {}; '. VS2012'nin burada yanlış olduğundan şüpheleniyorum. Ve kanonik noop '' [] {} '-' '' '' '' '' '' 'dır! Veya maksimum eğlence için <:]{%> '(palyaço noop). – Yakk