按返回类型重载模板
Overloading template by Return Type
Mooing Duck在这里做了一个评论:"一个函数不能返回多个类型。但是,您可以专门化或委托给重载,这工作正常。
我开始思考这个问题,我试图弄清楚,这个法典是怎样的:
template <typename T>
T initialize(){ return T(13); }
当调用时:
auto foo = initialize<int>();
auto bar = initialize<float>();
这不就是只被返回类型重载的 2 个同名函数吗?
这不是过载,而是专业化。 它们是不同的机制(事实上,将两者混合会导致混淆,因为在考虑专业化之前就解决了重载问题——例如,请参阅这篇 Sutter's Mill 文章:http://www.gotw.ca/publications/mill17.htm)。
下面是不允许的仅返回值重载的示例:
int initialize();
float initialize();
OTOH,给定主模板定义
template <typename T>
T initialize(){ return T(13);}
从这里引用
为了编译函数调用,编译器必须首先执行名称查找,对于函数,这可能涉及依赖于参数的查找,对于函数模板,可能后跟模板参数推导。如果这些步骤生成多个候选函数,则执行重载解析以选择实际调用的函数。
initialize<int>
和initialize<float>
只是所述模板的两个不同实例。它们是两个不同的函数,不属于同一潜在过载解决候选列表。
相关文章:
- 为什么重载运算符可以返回其返回类型以外的其他内容?
- 重载函数仅在返回类型上有所不同
- boost::enable_if on 成员函数,重载返回类型
- clang 拒绝具有尾随 decltype 返回类型的模板调用是否正确,具体取决于其重载之一?
- 按返回类型重载函数模板
- 为什么在下面的代码返回类型中是用于运营商重载的类类型
- 具有多重继承的纯虚函数重载和协变返回类型
- 如何使用内置返回类型重载运算符?
- 同时使用参数重载和返回类型重载
- 为什么+运算符重载返回类型是类类型而不是整数
- 重载参数类型和返回类型上的函数
- 错误-仅返回类型不同的函数不能重载.c++
- 重载运算符:常量与非常量返回类型:任何性能差异
- 可以使用尾随返回类型的条件重载
- 按返回类型重载模板
- 流运算符重载中的返回类型
- 返回类型的重载运算符 []
- 为什么前缀增量器重载返回类型而不是类型?
- 具有模板专用化的重载返回类型
- 模板化函数重载返回类型