任意類(模板或者是飛模板)可以擁有類模板或函數模板的成員,這種成員成為成員模板,成員模板不能為虛。成員模板的一個例子是標准容器的assign成員,接受兩個迭代器的assign版本使用模板形參表示其迭代器形參的類型。另一個例子就是接受兩個迭代器的容器構造函數。
1 定義成員模板
模板成員聲明看起來像任意模板的聲明一樣。
template成員聲明的開頭是自己的模板形參表。構造函數和assign函數各有一個模板類型形參,這些函數使用這些類型形參作為其函數形參的類型,他們函數class Queue{ public: template Queue(It beg,It end){ copy_elems(beg,end); } template void assign(Iter,Iter); private: template void copy_elems(Iter,Iter); }; template template void Queue ::assign(Iter beg,Iter end){ //destroy(); copy_elems(beg,end); } template template void Queue ::copy_elems(Iter beg,Iter end){ while(beg != end){ push(*beg); ++beg; } }
形參指明要復制元素范圍的迭代器。
templatetemplate void Queue ::assign(Iter beg,Iter end){ //destroy(); copy_elems(beg,end); }
short a[4] = {0,3,6,9}; Queueqi(a,a+4); vector vi(a,a+4); qi.assign(vi.begin(),vi.end());