微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

有没有办法使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; }

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

原文地址:https://www.jb51.cc/c/115417.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐