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; };