函数模板实例
这是值得考虑一下如何模板函数的实现在C + +,因为未来的教训将关闭一些这些概念。原来,C++不编译模板函数直接。相反,在编译的时候,当编译器调用一个函数模板,它复制的模板功能,并与实际类型代替模板类型参数!与实际类型的函数被调用函数模板实例。
让我们来看看这样一个例子看看。首先,我们有一个模板函数:
1
2
3
4
5
template <typename Type> // this is the template parameter declaration
Type max(Type tX, Type tY)
{
return (tX > tY) ? tX : tY;
}
然后将其编译成机器语言。
值得注意的是,编译器是足够聪明的知道只需要创建一个模板实例的每一套独特的类型参数。值得注意的是,如果你创建一个模板的功能,但没有叫它,没有模板的实例将被创建。
运算符,函数调用,和函数模板
模板函数与内置类型的工作(如char,int,双,等)和类,有一个警告。当编译器编译模板的实例,它编译它就像一个正常的功能。在一个正常的功能,任何运算符或函数调用,你用你的类型必须被定义,或者你将得到一个编译错误。同样,任何运营商或功能在你的模板函数调用必须对任何类型的函数模板实例化的定义。让我们更详细地看看这个。
首先,我们将创建一个简单的类:
1
2
3
4
5
6
7
8
9
10
class Cents
{
private:
int m_nCents;
public:
Cents(int nCents)
: m_nCents(nCents)
{
}
};
这个错误造成的实际上是由函数模板实例被创建时,我们调用指数(美分,int)。 记住,当我们调用函数a templated编译器”,stencils“out a复制功能在模板类型参数(placeholder类型)已经取代与实际的函数调用的类型。 这里是 函数 模板 实例 的 平均指数 ( T ) 当 对象 是一个 美分 。