带有函数指针的模板化函数可以推导出该函数指针的参数,如下所示:
template<class... Args>
void func(void (*ptr)(Args&& ...)) {
//Do something useful knowing the Args...
}
你可以用lambda作为参数吗?
不使用std :: function或编写类似function_traits的元编程特征类?即仅使用函数推导出参数.
解决方法:
不,那是不可能的.模板参数推导只能推导出参数类型“组成”部分的类型,常量和模板,例如,从void(*)(Args&& …)中推导出void和Args …例如,或从T(&)[N]中推导出T和N.它不能推断出类型中没有出现的任何内容.
对于非多态lambda类型T,& T :: operator()的类型包含有关lambda参数类型的可推导信息.但是T本身并没有.