其他分享
首页 > 其他分享> > c – 模板函数可以推导出lambda的参数吗?

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

标签:c,lambda,metaprogramming,function-pointers,c17
来源: https://codeday.me/bug/20190828/1749671.html