当前位置:编程学习 > C/C++ >>

第16章 模板与泛型编程(1)

所谓泛型编程就是以独立于任何特定类型的方式编写代码。模板是泛型编程的基础。模板是创建类或函数的蓝图或公式。

面向对象编程所依赖的多态性称为运行时多态性,泛型编程所依赖的多态性称为编译时多态性或参数式多态性。

16.1 模板定义

我们可以不用为每个类型定义一个新函数,而是只定义一个函数模板(function template)。函数模板是一个独立于类型的函数,可作为一种方式,产生函数的特定类型版本。

template <typename T> 
int compare(const T &v1, const T &v2){ 
    if(v1<v2)  
        return -1; 
    else if(v2<v1)  
        return 1; 
    else 
        return 0; 

template <typename T>
int compare(const T &v1, const T &v2){
 if(v1<v2)
  return -1;
 else if(v2<v1)
  return 1;
 else
  return 0;
}模板定义以关键字template开始,后接模板形参表(template parameter list),模板形参表是用尖括号住的一个或多个模板形参(template parameter)的列表,形参之间以逗号分隔。

模板形参表不能为空。

1.模板形参表

模板形参表很像函数形参表,函数形参表定义了特定类型的局部变量但并不初始化那些变量,在运行时再提供实参来初始化形参。

同样,模板形参表示可以在类或函数的定义中使用的类型或值。在函数内部,可以使用名字T引用一个类型,T表示哪个实际类型由编译器根据所用的函数而确定。

2. 使用函数模板

使用函数模板时,编译器会推断哪个(或哪些)模板实参(template argument)绑定到模板形参。一旦编译器确定了实际的模板实参,就称它实例化(instantiate)了函数模板的一个实例。

cout <<compare("10","20")<<endl; 
 cout <<compare("10","20")<<endl;3. inline函数模板

函数模板可以用与非模板函数一样的方式声明为inline。说明符放在模板形参表之后,返回类型之前,不能放在关键字template之前。

template <typename T> inline 
const T &the_min(const T &v1, const T &v2){ 
        if(compare(v1, v2)==-1) 
            return v1; 
        else 
            return v2; 

template <typename T> inline
const T &the_min(const T &v1, const T &v2){
  if(compare(v1, v2)==-1)
   return v1;
  else
   return v2;
}cout<<the_min(10,29)<<endl; 

 摘自 xufei96的专栏
 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,