当前位置:  开发笔记 > 编程语言 > 正文

函数返回类型是否会影响过载的选择?

如何解决《函数返回类型是否会影响过载的选择?》经验,为你挑选了1个好方法。

在这篇文章中,建议使用以下方法为operator<<定义dump()成员函数的所有类定义函数:

template 
auto operator<< (std::basic_ostream & str, const T & t) -> decltype(t.dump(str))
{
    return t.dump(str);
}

为什么这个函数模板没有捕获所有类型,包括那些没有定义dump成员函数的类型?我的意思是,是否在选择过载时考虑了函数签名的返回类型部分?



1> Dietmar Kühl..:

返回类型本身无关紧要.当声明对实例化无效时,所提出的技术依赖于SFINAE(替换失败不是错误)来删除重载.也就是说,当编译器尝试operator<<()使用T没有可访问dump(str)成员的类型实例化上述内容时,decltype(t.dump(str))将无效.而不是失败它决定这个重载将不起作用并将其从候选重载集中删除.

收集候选人后,重载解决方案会选择最佳选项.如果最佳选项是唯一的,则选择它进行调用.如果没有拟合选项或有多个最佳匹配,那将是一个错误.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有