generischer Rückgabewert bei Variadic Templates
-
Hallo,
ich würde gerne den Rückgabewert einer Funktion generisch abhängig
von den übergebenen aufrufbaren Einheiten durch den Compiler ermitteln lassen.
Leider schaffe ich es nicht die Rückgabewerte der aufrufbaren Einheiten, welche als Parameter Pack übergeben werden, mit decltype zu bestimmen.Im Netz habe ich wage Informationen gefunden, dass das nicht geht.
Eventuell mache ich auch was falsch?Könnte man den Rückgabewert über rekursive Metatemplate-Progammierung bestimmen? Wenn ja, wie könnte das aussehen?
Vllt. hat jemand eine Idee?Vielen Dank.
#include <iostream> template<typename MergeFun, typename ... Callables> //auto callwrapper(MergeFun mf, Callables ... c) -> decltype(mf((decltype(c())...))) //klappt nicht auto callwrapper(MergeFun mf, Callables ... c) -> decltype(mf(1,2)) //klappt, aber nicht generisch //int callwrapper(MergeFun mf, Callables& ... c) //klappt, ist aber auch nicht generisch { return mf(c()...); } int main() { auto mergeFun = [] (int a,int b) { return a+b;}; auto fun1 = [] { return 5;}; auto fun2 = [] { return 5;}; std::cout << callwrapper(mergeFun,fun1,fun2) << '\n'; return 0; }
-
Warum nicht:
auto callwrapper(MergeFun mf, Callables ... c) -> decltype(mf(c()...))
?
-
Super, danke!
Ja, manchmal übersieht man die einfachsten Lösungen und denkt zu umständlich.