一.初始化列表相關
1.初始化順序受申明順序影響
2.在必要時可以部分不采用初始化列表,避免受特性1影響
二.非類型模板參數
template< class T , size_t N = 10 >
三.特化–特殊化處理
template< class T >
bool less(T left , T right)
{
return left<right;
}
當調用時傳入的是地址,這時候比較邏輯存在錯誤
因此要采用特化(類似于類的顯示實例化)
template<>
bool less<Date*>(Date * left ,Date* right)
{
return *left<*right;
}
注意:模板函數一般不采用特化,直接寫個匹配的普通函數就行了(有現成吃現成)
小細節講解:
bool less(const T& left…)
特化:
bool less< const Date*& left> 不對特化不成功,模板函數const修飾的是left ,這里修飾的是 * left
bool less< Date* const & left> ,正確的
四.類模板–特化
1.全特化 template<> class Date< int char >
2.偏特化有兩種一種是部分特化,一種是對參數形成限制
template< class T1> class Date< class T1, char >//部分特化
template< class T1 class T2> class Date< T1* ,T2* >//對參數形成限制
類模板特化應用示例
有如下專門用來按照小于比較的類模板Less:
template
struct Less
{
bool operator()(const T& x, const T& y) const
{
return x < y;
}
};
sort( v1.begin() , v1.end() , Less < Date >( ));
// 可以直接排序,結果錯誤日期還不是升序,而v2中放的地址是升序
// 此處需要在排序過程中,讓sort比較v2中存放地址指向的日期對象
// 但是走Less模板,sort在排序時實際比較的是v2中指針的地址,因此無法達到預期
sort(v2.begin(), v2.end(), Less<Date>( ));*
解決方案:// 對Less類模板按照指針方式特化
template<>
struct Less<Date*>
{
bool operator()(Date* x, Date* y) const
{
return *x < *y;
}
};
五.編譯.聲明和定義相關問題
六…(難點目前不會??????)
1.仿函數
2.普通迭代器和const迭代器