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()>([](){}));
}

questionAnswers(7)

yourAnswerToTheQuestion