我正在阅读“模板强制指南”一书,第12.2.1 节签名我无法理解作者的一句话:
它的返回类型,如果函数是从函数模板生成的
作者所说的“函数模板生成的函数”是什么意思?,他在这里谈论模板ID吗?如果是这样,为什么返回类型在这种情况下很重要,因为签名是由我们定义的?
一个简单的例子会很有帮助,谢谢。
在 12.2.1 节中,作者描述了在哪些情况下函数声明可以共存。函数模板的声明可以共存,即使它们具有不同的返回类型,例如,您可以声明:
template <typename T> int f();
tepmlate <typename T> char f();
如果你将这些函数设为非模板,你甚至不能声明它们。当然,在上面的表格中,您将无法调用该函数,尽管您可以使用强制转换显式选择其中一个函数(我不确定)。
具有不同返回类型的函数共存的主要用途(尽管这不是最初的意图),是根据条件从重载集中删除其中一些函数,例如:
template <typename T>
typename std::enable_if<std::numeric_limits<T>::is_specialized, T>::type
f(T); // used for types for which std::numeric_limits<T> is specialied
template <typename T>
typename std::enable_if<!std::numeric_limits<T>::is_specialized, T>::type
f(T); // used for types for which std::numeric_limits<T> is not specialied