-1

我正在阅读“模板强制指南”一书,第12.2.1 节签名我无法理解作者的一句话:

它的返回类型,如果函数是从函数模板生成的

作者所说的“函数模板生成的函数”是什么意思?,他在这里谈论模板ID吗?如果是这样,为什么返回类型在这种情况下很重要,因为签名是由我们定义的?

一个简单的例子会很有帮助,谢谢。

4

1 回答 1

2

在 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
于 2012-11-10T19:42:55.837 回答