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.