C/C++模版

2015/12/06 - C/C++

函数模板

template <class T> void swap(T& a, T& b){}

当调用模板函数时类型T就会被“被调用时的实参类型”自动所代替,比如swap(a,b)其中a和b是int 型,这时模板函数swap中的形参T就会被int 所代替。不能在函数调用的参数中指定模板形参的类型,对函数模板的调用使用实参自动推演来进行

类模板

类模板形参不存在实参推演的问题,必须通过尖括号表明 A m

template<class T> class A{
    public:
        T g(T a,Tb);
        A();
};
template<classT> A<T>::A(){}
template<classT> T A<T>::g(T a,T b){
    return a+b;
}

模板的形参

类型模板形参:类型形参由关见字class或typename后接说明符构成,如template<class T> void h(T a){};其中T就是一个类型形参

非类型模板形参:模板的非类型形参也就是内置类型形参,

  • 如template<class T, int a> class B{};其中int a就是非类型的模板形参。
  • 如果有int b,这时A<int, b> m;将出错,因为b不是常量。
  • 如果const int b,这时A<int, b> m;就是正确的,因为这时b是常量。 非类型形参一般不应用于函数模板中

可以为类模板的类型形参提供默认值,但不能为函数模板的类型形参提供默认值。函数模板和类模板都可以为模板的非类型形参提供默认值

template<class T1, class T2=int>class A{};为第二个模板类型形参T2提供int型的默认值。

在类模板的外部定义类中的成员时template 后的形参表应省略默认的形参类型。

比如template<class T1, classT2=int> class A{public: void h();};

定义方法为template<class T1,class T2> voidA<T1,T2>::h(){}


如果文章对您有帮助,欢迎扫描下方二维码赞助(一分也是爱噢),谢谢

Search

    一分也是爱噢 一分也是爱

    目录