成員模板
- 一個類(類模板或者普通類)可以包含本身是模板的成員函數
- 成員模板不能是虛函數
普通類的成員模板
- 下例爲一個類似於unique_ptr的默認刪除器的類
- 希望刪除器適用於任何類型,所以將調用運算符定義爲一個模板
- 成員模板也是也模板參數列表開始
class DebugDelete{
public:
DebugDelete(std::ostream &s = std::err):os(s){}
template<typename T> void operator(T *p) const
{os << "deleting unique_ptr"<<std::endl;delete p;}
private:
std::ostream &os;
}
unque_ptr<int, DebugDelete>p(new int, DebugDelete());
類模板的成員模板
- 類和成員各有自己的、獨立的模板參數
- 在類模板外定義一個成員模板時,必須同時爲類模板和成員模板提供模板參數列表。類模板參數列表在前,後跟成員模板參數列表
實例化與成員模板
- 實例化一個類模板的成員模板,必須同時提供類和函數模板的實參