Jak przekonwertować lambdę do funkcji std :: przy użyciu szablonów
Zasadniczo to, co chcę zrobić, to pobrać lambdę z dowolną liczbą parametrów dowolnego typu i przekonwertować ją na funkcję std ::. Próbowałem następujących i żadna metoda nie działa.
std::function([](){});//Complains that std::function is missing template parameters
template <typename T> void foo(function<T> f){}
foo([](){});//Complains that it cannot find a matching candidate
Poniższy kod działa jednak, ale nie jest to, czego chcę, ponieważ wymaga jawnego określenia parametrów szablonu, które nie działają dla kodu ogólnego.
std::function<void()>([](){});
Cały wieczór obijałem się funkcjami i szablonami i nie mogę tego pojąć, więc każda pomoc byłaby bardzo doceniana.
Jak wspomniano w komentarzu, powodem próbuję to zrobić, ponieważ próbuję zaimplementować currying w C ++ przy użyciu szablonów variadic. Niestety, to się nie udaje przy użyciu lambd. Na przykład mogę przekazać standardową funkcję za pomocą wskaźnika funkcji.
template <typename R, typename...A>
void foo(R (*f)(A...)) {}
void bar() {}
int main() {
foo(bar);
}
Nie mogę jednak zrozumieć, jak przekazać lambdę do takiej funkcji zmiennoprzecinkowej. Dlaczego interesuje mnie konwersja ogólnej lambdy do funkcji std :: jest taka, że mogę wykonać następujące czynności, ale wymaga to, że jawnie określę parametry szablonu na std :: function, czego staram się unikać.
template <typename R, typename...A>
void foo(std::function<R(A...)>) {}
int main() {
foo(std::function<void()>([](){}));
}