c – 传递给模板函数时lambda自动衰减到函数指针

c – 传递给模板函数时lambda自动衰减到函数指针,第1张

概述有没有办法使lambda衰减指针,而没有明确地转换为正确的签名?这将整理一些代码: template<typename T> T call(T(*func)()){ return func(); }int ptr(){ return 0; }int main(){ auto ret1 = call(ptr); auto ret2 = call((int(*)())([]{ r 有没有办法使lambda衰减到指针,而没有明确地转换为正确的签名?这将整理一些代码:
template<typename T> T call(T(*func)()){ return func(); }int ptr(){ return 0; }int main(){    auto ret1 = call(ptr);    auto ret2 = call((int(*)())([]{ return 0; }));    auto ret3 = call([]{ return 0; });  //won't compile}

很明显,只有当lambda衰减到指针时,调用调用才起作用,但我猜测只有在选择了正确的函数重载/模板之后才会发生这种情况.不幸的是,我只能想到涉及模板​​的解决方案来制作一个带有任何签名衰变的lambda,所以我回到原点.

解决方法 你可以改变你的lambda来使用一元运算符:[] {return 0; }

这是有效的,因为一元加号可以应用于指针,并将触发隐式转换为函数指针.

总结

以上是内存溢出为你收集整理的c – 传递给模板函数时lambda自动衰减到函数指针全部内容,希望文章能够帮你解决c – 传递给模板函数时lambda自动衰减到函数指针所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1232893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存