C++primer练习16.17-21

练习16.17

::没有,当表示为一种类型的时候用typename

练习16.18

(a)违法,每个模板参数都要有一个typename或者class

(b)非法,模板参数名为掩盖

(c)inline要写在返回类型前

(d)合法

(e)非法,这命名冲突

练习16.19

 template<typename T >
 void print(T& a)
 {
     for(typename T::size_type d=0;d!=a.size();++d)
     std::cout<<d<<std::endl;
 }
int main ()
{
    std::vector<int>  a={1,2,3,5,6,7,8,9};
    print(a);
    
}

练习16.20

template<typename T >
 void print(T& a)
 {
     for(typename T::iterator d=a.begin();d!=a.end();++d)
     std::cout<<*d<<std::endl;
 }
int main ()
{
    std::vector<int>  a={1,2,3,5,6,7,8,9};
    print(a);
    
}

练习16.21

class DebugDelete{
    public:
        DebugDelete(std::ostream &s=std::cerr):os(s){        }
        template <typename T>void operator()(T*p)const {
            os<<"deleting unique_ptr"<<std::endl;delete p;
        }
    
    private :
        std::ostream &os;
};

 

posted @ 2022-08-20 12:03  yddl  阅读(26)  评论(0编辑  收藏  举报