Parametertypen eines Lambdas erhalten



  • Komme ich irgendwie an die Parameter eines Lambdas? Beziehungsweise welche Typen diese haben?

    pseudo:

    template <typename LambdaT>
    void infer(LambdaT lam) {
      get_first_parameter_type<LambdaT>::type myVar; // int myVar
    }
    
    infer([](int a){});
    

    Ich brauche das auch nicht für eine beliebige Anzahl Parameter.



  • Beziehungsweise liege ich richtig in der Annahme, dass das unmöglich ist.



  • template<typename F, typename Ret, typename A, typename... Rest>
    A helper(Ret(F::*)(A, Rest...));
    
    template<typename F, typename Ret, typename A, typename... Rest>
    A helper(Ret(F::*)(A, Rest...) const);
    
    template<typename F>
    struct first_argument {
        typedef decltype(helper(&F::operator())) type;
    };
    
    template <typename LambdaT>
    void infer(LambdaT lam) {
        typename first_argument<LambdaT>::type myVar;
    }
    
    int main()
    {
        infer([](int foo) {});
    }
    


  • @Swordfish

    ❤

    Wenn ich gewusst hätte dass das hier geht... F::operator() für lambdas.


Anmelden zum Antworten