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.


Log in to reply