模板定义中的名字解析分两个步骤进行。首先,不依赖与模板参数的名字在模板定义时被解析;其次,依赖于模板参数的名字在模板实例化时被解析。
请看下面的一段程序:
//------primer.h-----
//这个声明是必需的
//print(const char *)在min()中被调用
void print(const char*) ;
template<class T>
T min(T *array,int size)
{
T min_val = array[0] ;
for (int i=1;i<size;i++)
{
if (array[i] < min_val)
{
min_val = array[i] ;
}
}
print("Minimum value found: ") ; //注意这里的print
print(min_val) ; //注意这里的print
return min_val ;
}
上面min函数中有两个print函数。print("Minimum value found: ") ;是不依赖于模板参数的函数,所以它的声明必须在min使用它之前。而print(min_val) ;由于参数min_val依赖于模板参数,所以使用它时不需要声明,因为我们还不知道要寻找的是哪个print函数,只有当min_val的类型是已知的时候,才可能知道应该调用哪个print函数。这个例子很好的解释了上面的这段话。