C++模板特例化(C++primer习题16.63/64)

一、函数模板特例化

注意:

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;
}

二、类模板特例化

发布了58 篇原创文章 · 获赞 64 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ThorKing01/article/details/102757891
今日推荐