C/C++:模版

通常模版声明与定义都放在头文件{\red{通常模版声明与定义都放在头文件}}


分为函数模版,类模版。

模版类和模版函数的区别在于:模版类只能显示调用{\red{模版类和模版函数的区别在于:模版类只能显示调用}}


使用模版的意义在于复用代码,
但可能会出现代码膨胀,即目标二进制代码臃肿,影响运行效率,例如:

template<class T,int num>
class A{
};
int main(){
	A<int,1> a1;
	A<int,2> a2;
	return 0;
}

模版第二个参数应该分离出去,变为类内参数。

特化:{\red{特化:}}

分为函数模版特化,类模版特化。
即,当模版参数不同时,采用的操作步骤也可能不同。

函数特化:

template<class T>
bool is(T x,T y){
    return x == y;
}

template<>
bool is(char* x,char* y){
    return strcmp(x,y) == 0;
}

类特化:

template<class T>
class A{
public:
bool is(T x,T y){
    return x == y ;
}
};

template<>
class A<char*>{
public:
bool is(const char* x,const char* y){
    return strcmp(x,y)==0;
}
};

int main(){
    A<int> a;
    A<char*> b;
    cout<<a.is(1,2)<<endl;
    cout<<b.is("123","123")<<endl;
    return 0;
}

所以,选择函数模版是编译时决定,类模版实例由程序员显示指定。{\red{所以,选择函数模版是编译时决定,类模版实例由程序员显示指定。}}

全部特化:

template<class A,class B>
class X{};
template<>
class X<int,string>{};

部分特化:

template<class A,class B>
class X{};
template<class A>
class X<A,string>{};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值