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