template

template & Generic programming


模板 与 泛型编程

请看:

int max(int x,int y){
    return ((x) > (y) ? (x) : (y))
}
#define max(x, y)  ((x) > (y) ? (x) : (y))

利用函数模板:

template 
T max(T x, T y)
{
    return x > y ? x : y;
}
void main(){
    double a = 1.0, b;
    b = max(a, 2.0);
    
    int x=10,y=20,z;
    z = max(x,y);
}

【习4-2】改造swap函数,使之能用于任意类型

类模板

【例4-3】Stack+Vector(stl)

template <class T>
class Stack{
public:
    void push(T item);
    T pop();
    bool isEmpty();
private:
    Vector<T> data;
};

Stack+Vector

template <class T>
void Stack::push(T item){
    data.push_back(item);
}

template <class T>
T Stack::pop(){
    T value = data.back();
    data.pop_back();
    return value;
}

bool Stack::isEmpty(){
    return data.empty();
}
int main(){
    Stack<int> s1;
    s1.push(100);
    
    Stack<float> s2;
    s2.push(2.0);
}

【习4-3】设计类型无关的安全数组

The End

目录