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

带有函数指针的模板化函数可以推导出该函数指针的参数,如下所示:

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本身并没有.

上一篇:恭喜长征五号遥三运载火箭发射,浅谈编程语言在军事方面的运用!


下一篇:世界上第一个程序员,为什么是拜伦之女Ada