类模板的特化

       你可以用模板实参来特化类模板,和函数模板的重载类似,通过特化类模板,你可以优化基于某种特定类型的实现,或者克服某种特定类型在实例化类模板时所出现的不足,另外,如果要特化一个类模板,你还要特化该类模板的所有成员函数,虽然也可以只特化某个成员函数,但这个做法并没有特化整个类,也就没有特化整个模板。

     

      为了特化一个类模板,你必须在起始处声明一个template<>,接下来声明用来特化类模板的类型,这个类型被用作模板实参,且必须在类名的后面直接指定。

template<>

class Stack<std::string>{


}


     进行类模板的特化时,每个成员函数都必须重新定义为普通函数,原来模板函数中的每个T也相应地被进行特化的类型取代:

     void  Stack<std::string>:: push(std::string const& elem)

    {

         elems.push_back(elem);                  //附加传入实参elem的拷贝

    }


    用std::string特化Stack<>的完整例子:  

     template<>

      class Stack<std::string>{

            private:

                  std::deque<std::string>  elems;

            public:

                  void push(std::string const&);                 //压入元素

                  void pop();                                              //弹出元素

                  std::string top()  const;                           //返回栈顶元素

                  bool  empty() const{

                          return elems.empty();

                 }

     };


     void  Stack<std::string>::push (std::string const& elem)

     {

                elems.push_back(elem);        //把传入的实参elem附加到末端

      }


      void Stack<std::string>::pop()

      {

             if(elem.empty()){

                        throw std::out_of_range

                                  ("Stack<std::string>::pop() :empty stack");

             }

            elems.pop_back();                //删除末端元素

      }


      std::string Stack<std::string>::top()  const

      {

                 if(elems.empty()){

                         throw  std::out_of_range

                                     ("Stack<std::string> ::top() : empty stack");

                }

               return elems.back();          //返回末端元素的拷贝

     }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值