成员模板

    xiaoxiao2021-03-25  122

    #include "head.h"      template<typename T>   class Beta   {   private:       template<typename V>       class hold       {       private:               V val;       public:               hold(V v):val(v){}               void show() const {cout<<val<<endl;}                   V value() const {return val;}          }              hold<T> q;       hold<int> n;      public:       Beta(T t,int i):q(t),n(i){}       template<typename U>       U blab(U a,T b)       {               return (((q.value+n.value())*a)/t);       }       void show() const       {           q.show();           n.show();       }   };         /*  template<typename T>  class Beta  {  private:      template<typename V>      class hold;      hold<T> q;      hold<int> n;    public:      Beta(T t,int i):q(t),n(i){}      template<typename U>      U blab(U a,T b);      void show() const      {          q.show();          n.show();      }  };    template<typename T>  template<typename V>  class Beta<T>::hold  {  private:      V val;  public:      hold(V v):val(v){}      V value()const {return val;}      void show()const {cout<<val<<endl;}  };    template<typename T>  template<typename U>  U Beta<T>::blab(U a,T b)  {      return (((q.value()+n.value())*a)/b);  }    */               int main()   {       Beta<double> t(3.5,3);       t.show();          cout<<t.blab(10,2.3)<<endl;       cout<<t.blab(10.0,2.3)<<endl;       cout<<"Done"<<endl;          return 0;   }  

    两种方法:一种是class里面声明且定义。一种是class里面declaration,但是在类外面definition

    注意class外面definition的时候,由于template是nested(潜入)的,因此须使用句法:

    [cpp]  view plain  copy template<typename T>   template<typename U>   而不是

    template<typename T,typename V>

    定义还须之处hold和blab是Beta<T>class的成员,通过使用作用域解析操作符。

    转载请注明原文地址: https://ju.6miu.com/read-6980.html

    最新回复(0)