So konvertieren Sie ein Lambda in eine std :: -Funktion mithilfe von Vorlagen

Grundsätzlich möchte ich in der Lage sein, ein Lambda mit einer beliebigen Anzahl von Parametern zu nehmen und es in eine std :: -Funktion umzuwandeln. Ich habe Folgendes versucht und keine Methode funktioniert.

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

Der folgende Code funktioniert jedoch, ist jedoch nicht das, was ich möchte, da explizit die Angabe der Vorlagenparameter erforderlich ist, was für generischen Code nicht funktioniert.

std::function<void()>([](){});

Ich habe den ganzen Abend mit Funktionen und Vorlagen rumgespielt und ich kann das einfach nicht herausfinden, daher wäre jede Hilfe sehr dankbar.

Wie in einem Kommentar erwähnt, ist der Grund, warum ich dies versuche, der Versuch, Currying in C ++ mithilfe verschiedener Vorlagen zu implementieren. Leider scheitert dies bei der Verwendung von Lambdas schrecklich. Zum Beispiel kann ich eine Standardfunktion mit einem Funktionszeiger übergeben.

template <typename R, typename...A>
void foo(R (*f)(A...)) {}
void bar() {}
int main() {
    foo(bar);
}

Ich kann jedoch nicht herausfinden, wie man ein Lambda an eine solche variable Funktion weitergibt. Ich bin an der Konvertierung eines generischen Lambdas in eine std :: -Funktion interessiert, weil ich Folgendes tun kann, aber es endet damit, dass ich die Template-Parameter explizit in std :: -Funktion angeben muss, was ich vermeiden möchte.

template <typename R, typename...A>
void foo(std::function<R(A...)>) {}
int main() {
    foo(std::function<void()>([](){}));
}

Antworten auf die Frage(7)

Ihre Antwort auf die Frage