然后将其编译成机器语言。
值得注意的是,编译器是足够聪明的知道只需要创建一个模板实例的每一套独特的类型参数。值得注意的是,如果你创建一个模板的功能,但没有叫它,没有模板的实例将被创建。
运算符,函数调用,和函数模板
模板函数与内置类型的工作(如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)
{
}
};
|
1
2
3
4
|
Cents cNickle(5);
Cents cDime(10);
Cents cBigger = max(cNickle, cDime);
|
然后将其编译成机器语言。
值得注意的是,编译器是足够聪明的知道只需要创建一个模板实例的每一套独特的类型参数。值得注意的是,如果你创建一个模板的功能,但没有叫它,没有模板的实例将被创建。
运算符,函数调用,和函数模板
模板函数与内置类型的工作(如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)
{
}
};
|