加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:51:02 所属栏目:百科 来源:网络整理
导读:有没有办法使lambda衰减到指针,而没有明确地转换为正确的签名?这将整理一些代码: templatetypename T T call(T(*func)()){ return func(); }int ptr(){ return 0; }int main(){ auto ret1 = call(ptr); auto ret2 = call((int(*)())([]{ return 0; })); au
有没有办法使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; }

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读