Ableiten der Rufsignatur eines Lambdas oder eines beliebigen Aufrufs für "make_function"

In einigen Situationen ist es wünschenswert, in der Lage zu sein, eine aufrufbare Instanz (z. B. Funktion, Funktionszeiger, Objektinstanz mitoperator()Lambdamem_fn), zum Beispiel inVerwenden von Boost-Adaptern mit C ++ 11-Lambdas Wobei ein kopierzuweisbarer und standardmäßig konstruierbarer Typ erforderlich ist.

std::function wäre ideal, aber es scheint keinen Weg zu gebenautomatisch Bestimmen Sie, welche Signatur die Klassenvorlage instanziieren sollstd::function mit. Gibt es eine einfache Möglichkeit, die Funktionssignatur eines beliebigen aufrufbaren Elements abzurufen und / oder in ein geeignetes Element zu packen?std::function Instanz der Instanziierung (d. h. amake_function Funktionsschablone)?

Konkret suche ich das eine oder andere von

template<typename F> using get_signature = ...;
template<typename F> std::function<get_signature<F>> make_function(F &&f) { ... }

so dassmake_function([](int i) { return 0; }) gibt a zurückstd::function<int(int)>. Offensichtlich würde dies nicht funktionieren, wenn eine Instanz mit mehr als einer Signatur aufrufbar ist (z. B. Objekte mit mehr als einer, Vorlage oder Standardparameter)operator()s).

Boost ist in Ordnung, obwohl Nicht-Boost-Lösungen bevorzugt werden, die nicht übermäßig komplex sind.

Edit: Beantwortung meiner eigenen Frage.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage