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

二、类模板特例化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值