模板函数可以推导出 lambda 的参数吗?

Can a template function deduce a lambda's arguments?

采用函数指针的模板函数可以像这样推导该函数指针的参数:

template<class... Args>
void func(void (*ptr)(Args&& ...)) {
    //Do something useful knowing the Args...
}

你能用 lambda 作为参数做同样的事情吗? 无需诉诸 std::function 或像 function_traits 那样编写元编程特征 class?即仅使用函数推导参数。

不,那不可能。模板参数推导只能推导属于参数类型 "compositionally" 的类型、常量和模板,例如,从 void(*)(Args&&...) 推导 voidArgs...,如您的示例,或从 T(&)[N] 推导出 TN。它无法推断出类型中未出现的任何内容。

对于非多态 lambda 类型 T&T::operator() 的类型包含有关 lambda 参数类型的可推导信息。但是 T 本身没有。