【基础C&C++】模板

在C++发明阶段,C++之父Stroustrup和贝尔实验室的C++小组对原先的宏方法进行了修订,对其进行了简化并将它从预处理范围移入了编译器。这种新的代码替换装置被称为模板。模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。

面对代码重用,我们有哪些选择呢?比如:宏定义,函数重载...,我们以比较两个数的大小为例:

#define MAX(a,b) (a>b)?a:b
int max(int a, int b){ 
    return (a>b)?a:b;
}
float max(float a, float b){
    return (a>b)?a:b;
}
char max(char a, char b){
    return (a>b)?a:b;
}

int main(){ 
    int int_a=2,int_b=3;
    float float_a=2.0,float_b=3.0;
    char char_a='a',char_b='b';
    
    printf("=============macro definition======\n");
    printf("max(2,3)=%d\n",MAX(int_a,int_b));
    printf("max(2.0,3.0)=%f\n",MAX(float_a,float_b));
    printf("max(a,b)=%c\n",MAX(char_a,char_b));

    printf("=============overload==============\n");
    printf("max(2,3)=%d\n",max(int_a,int_b));
    printf("max(2.0,3.0)=%f\n",max(float_a,float_b));
    printf("max(a,b)=%c\n",max(char_a,char_b));
    return 0;
}

[work@sunxin template]$ make
g++ -g -c main.cpp    
g++ -g -o main main.o -lpthread
[work@sunxin template]$ ./main 
=============macro definition======
max(2,3)=3
max(2.0,3.0)=3.000000
max(a,b)=b
=============overload==============
max(2,3)=3
max(2.0,3.0)=3.000000
max(a,b)=b
但是对于宏定义而言,他只是在预处理时的代码复制过程。而对于函数重载,对不同类型的参数都必须单独写一个重载函数,而它内部的处理逻辑可能是完全一样的,代码显得比较臃肿。

当当当...于是乎,模版横空出世了。

template <typename T>
T max(T a, T b){
    return (a>b)?a:b;
}

int main(){ 
    int int_a=2,int_b=3;
    float float_a=2.0,float_b=3.0;
    char char_a='a',char_b='b';
    
    printf("max(2,3)=%d\n",max(int_a,int_b));
    printf("max(2.0,3.0)=%f\n",max(float_a,float_b));
    printf("max(a,b)=%c\n",max(char_a,char_b));
    return 0;
}


[work@sunxin template]$ make
g++ -g -c main.cpp    
g++ -g -o main main.o -lpthread
[work@sunxin template]$ ./main 
max(2,3)=3
max(2.0,3.0)=3.000000
max(a,b)=b



参考引文:

[1] 深度解析C++模版,http://developer.51cto.com/art/201208/351569.htm

[2] C++模版学习,http://www.cnblogs.com/gaojun/archive/2010/09/10/1823354.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值