foo
çağrısı belirsiz olduğu söylenir çünkü bu, derleme değilFonksiyon aşırı yük kullanarak lambda fonksiyonu imza
void foo(const std::function<int()>& f) {
std::cout << f() << std::endl;
}
void foo(const std::function<int(int x)>& f) {
std::cout << f(5) << std::endl;
}
int main() {
foo([](){return 3;});
foo([](int x){return x;});
}
aşağıdaki örneği inceleyin. Anlayabildiğim kadarıyla, bu lambda işlevi bir std::function
priori değil, ama o döküm edilmeli ve keyfi bir argüman alır bir std::function
yapıcı vardır. Birisi bana neden herhangi birinin keyfi bir argümanı alan örtülü bir kurucu oluşturacağını açıklayabilir. Ancak benim akut soru, bir foo
fonksiyonunu aşırı yüklemek için lambda fonksiyonlarının fonksiyon imzasını kullanmasına izin veren bir geçici çözüm olup olmadığıdır. İşlev işaretçileri denedim, ancak bu işe yaramadı çünkü lambda işlevlerini yakalamak normal bir işlev işaretçisine dönüştürülemiyor.
Herhangi bir yardım en hoş geldiniz.
Bu muhtemelen MSVC'de bir hatadır. Clang/GCC'de çalışır. –
Oh Microsoft, çok eğlenceli –
[Benim için çalışıyor] (http://ideone.com/XmAgLG). Hangi derleyiciyi kullanıyorsunuz? –