一、函数模板特例化
注意:
1.原模板的声明必须在任何使用模板实例之前。
2.特例化的模板的声明也必须在原模板的作用域中。
3.特例化的模板的函数参数类型必须与原模板中的对应的类型匹配。
在这个例子中,调用原模板的T是int;模板特例化的T是const char *;但是在写模板参数的形参时,需要注意:原模板的形参是T类型的引用,则模板特例化也需要写成引用。
template <typename T>
int calculate_num(vector<T> &vector1,T &select){
int answer=0;
for(auto iter=vector1.begin();iter!=vector1.end();iter++){
if(*iter==select)
answer++;
}
return answer;
}
template <>
int calculate_num(vector<const char*> &vector1,const char * &p){
int answer=0;
for(auto iter=vector1.begin();iter!=vector1.end();iter++){
if(*iter==p)
answer++;
}
return answer;
}
int main()
{
int select=3;
vector<int> vector1{1,2,3,4,54,3,2,1};
int answer=calculate_num(vector1,select);
cout<<answer<<endl;
string string1="asf";
const char *select1=string1.c_str();
vector<const char *> vector2;
vector2.push_back(select1);
int answer2=calculate_num(vector2,select1);
cout<<answer2<<endl;
return 0;
}