模板

[!TIP|style:flat|label:简介]

模板是作为泛型编程基础而存在的,其目的是以独立于类型的方式来编写代码

我们所使用的stl库中的容器就使用了泛型编程的思想

比如 vector<int> vector<string> 我们如果一般编程就要写很多个只有类型不同的函数,想想都头疼。

使用方式

通常将模板的声明和实现都放在头文件中

template < class T >
void swap( T& x, T& y ){
    T temp = x;
    x = y;
    y = temp;
}

其中 class T就可以代表任何内建类型或用户定义的类型

也可以用模板生成模板类,模板类的一个典型用途就是在容器类中。

template <class T>
class Stack { 
  private: 
    vector<T> i;

  public: 
    void push(T const&);  
    void pop();            
    T top() const;            
    bool empty() const{       
        return i.empty(); 
    } 
};

[!TIP|style:flat|label:注意!!]

对于模板函数来讲,是不会对它进行类型转换的,而且所有的T都必须是一个类型,不能在一处是int,一处是string

编译时糊优先调用已经显示写出的函数,找不到就会使用模板实例化一个函数出来

如果函数没有参数,可以使用<>

如 func<int>();

当然,模板允许使用多个类型

template < class T, class U>
class MyClass{
    const U& lookup (const T&) const;
}

模板与继承

模板类可以继承模板类和非模板类,非模板类也可以继承模板类

// method 1
template <class A>
class Derived : public Base{...}

//method 2
template <class A>
class Derived : public Base<A>{...}

//method 3
class Derived: public Base<int>{...}
Copyright all right reserved,powered by Gitbook该文件修订时间: 2020-09-01 00:18:28

results matching ""

    No results matching ""