泛型

泛型,是一种将类型参数化以达到代码复用的技术,C+ +中使用模板来实现泛型。

模板(template)

格式:template <typename/class T>

也可以指定多个类型,template <typename A, typename B, typename C> C add(A a, B b),在调用的时候,指定参数类型即可。

如果有调用模板,编译器会根据参数类型,生成不同的函数。没有调用就不会生成

typenameclass是等价的。

模板的声明和实现如果分离到.h.cpp中,会导致链接错误。

template <typename T> 
T add(T a, T b)
{
    return a + b;
}

int main()
{
    cout << add<int>(1, 2) << endl;
    cout << add<double>(1.1, 2.1) << endl;
    
    cout << add(1, 2) << endl;
    cout << add(1.1, 2.1) << endl;
    return 0;
}

类模板,类模板的友元函数

template<typename T>
class List
{
    //                      这里要加上尖括号,可以不加空格
    //                        |
    //                        v
    friend ostream operator<< <>(ostream &cout, const List<T> &);
    // friend ostream operator<<<>(ostream &cout, const List<T> &);
    T *list = NULL;
};