И это действительно классное решение! Спасибо!)

у создать шаблонный класс или функцию, которая получает лямбду и помещает ее внутренне в std :: function <>. Лямбда может иметь любое количество входных параметров [] (int a, float b, ...) std :: функция <> должна соответствовать типу лямбда-оператора ()

template <typename T> 
void getLambda(T t) {
   // typedef lambda_traits::ret_type RetType; ??
   // typedef lambda_traits::param_tuple --> somehow back to parameter pack Args...
   std::function<RetType(Args...)> fun(t);
}

int main() {
    int x = 0;
    getLambda([&x](int a, float b, Person c){}); 
}

Поэтому мне нужно как-то извлечь тип возвращаемых данных и пакет параметров

ОтветВот предлагает использовать частичные спецификации лямбда-оператора :: operator ()

template <typename T>
struct function_traits : public function_traits<decltype(&T::operator())>
{};

template <typename ClassType, typename ReturnType, typename... Args>
struct function_traits<ReturnType(ClassType::*)(Args...) const>
// we specialize for pointers to member function
{
    enum { arity = sizeof...(Args) };
    // arity is the number of arguments.

    typedef ReturnType result_type;

    template <size_t i>
    struct arg
    {
        typedef typename std::tuple_element<i, std::tuple<Args...>>::type type;
        // the i-th argument is equivalent to the i-th tuple element of a tuple
        // composed of those arguments.
    };
};

Но мне нужен способ конвертировать tuple <> обратно в пакет параметров, чтобы создать правильную реализацию std :: function <>

Ответы на вопрос(1)

Ваш ответ на вопрос